1Tifftopnm User Manual(0) Tifftopnm User Manual(0)
2
3
4
6 tifftopnm - convert a TIFF file into a PNM image
7
8
10 tifftopnm
11
12 [-alphaout={alpha-filename,-}] [-headerdump] [-verbose] [-respectfil‐
13 lorder] [-byrow] [-orientraw] [tiff-filename]
14
15
16
18 This program is part of Netpbm(1).
19
20 tifftopnm reads a TIFF file as input and produces a PNM image as out‐
21 put. The type of the output file depends on the input file - if it's
22 black and white, tifftopnm generates a PBM image; if it's grayscale, it
23 generates a PGM image; otherwise, the output is PPM. The program tells
24 you which type it is writing.
25
26 If the TIFF file contains multiple images (multiple "directories"),
27 tifftopnm generates a multi-image PNM output stream. Before Netpbm
28 10.27 (March 2005), however, it would just ignore all but the first
29 input image.
30
31 The tiff-filename argument names the file that contains the Tiff image.
32 If you specify "-" or don't specify this argument, tifftopnm uses Stan‐
33 dard Input.
34
35 In either case, before Netpbm 10.70 (March 2015), the file must be
36 seekable. That means no pipe, but any regular file is fine. In cur‐
37 rent Netpbm, the file need not be seekable, but if it isn't, tifftopnm
38 creates a temporary regular file containing the entire image, so you
39 must have resources for that (and it may defeat your reason for using a
40 pipe).
41
42
43
44 TIFF Capability
45 pamtotiff uses the Libtiff.org TIFF library (or whatever equivalent you
46 provide) to interpret the TIFF input. So the set of files it is able
47 to interpret is determined mostly by that library.
48
49 This program cannot read every possible TIFF file -- there are myriad
50 variations of the TIFF format. However, it does understand monochrome
51 and gray scale, RGB, RGBA (red/green/blue with transparency channel),
52 CMYK (Cyan-Magenta-Yellow-Black ink color separation), and color pal‐
53 ette TIFF files. An RGB file can have either single plane (inter‐
54 leaved) color or multiple plane format. The program reads 1-8 and 16
55 bit-per-sample input, the latter in either bigendian or littlendian
56 encoding. Tiff directory information may also be either bigendian or
57 littlendian.
58
59 There are many TIFF formats that tifftopnm can read only if the image
60 is small enough to fit in memory. tifftopnm uses the TIFF library's
61 TIFFRGBAImageGet() function to process the TIFF image if it can get
62 enough memory for TIFFRGBAImageGet() to store the whole image in memory
63 at once (that's what TIFFRGBAImageGet() does). If not, tifftopnm uses
64 a more primitive row-by-row conversion strategy using the raw data
65 returned by TIFFReadScanLine() and native intelligence. That native
66 intelligence does not know as many formats as TIFFRGBAImageGet() does.
67 And certain compressed formats simply cannot be read with TIFFReadScan‐
68 Line().
69
70 Before Netpbm 10.11 (October 2002), tifftopnm never used TIFFRGBAIm‐
71 ageGet(), so it could not interpret many of the formats it can inter‐
72 pret today.
73
74 There is no fundamental reason that this program could not read other
75 kinds of TIFF files even when they don't fit in memory all at once.
76 The existing limitations are mainly because no one has asked for more.
77
78
79 Output Image
80 The PNM output has the same maxval as the Tiff input, except that if
81 the Tiff input is colormapped (which implies a maxval of 65535) the PNM
82 output has a maxval of 255. Though this may result in lost informa‐
83 tion, such input images hardly ever actually have more color resolution
84 than a maxval of 255 provides and people often cannot deal with PNM
85 files that have maxval > 255. By contrast, a non-colormapped Tiff
86 image that doesn't need a maxval > 255 doesn't have a maxval > 255, so
87 when tifftopnm sees a non-colormapped maxval > 255, it takes it seri‐
88 ously and produces a matching output maxval.
89
90 Another exception is where the TIFF maxval is greater than 65535, which
91 is the maximum allowed by the Netpbm formats. In that case, tifftopnm
92 uses a maxval of 65535, and you lose some information in the conver‐
93 sion.
94
95
97 You may abbreviate any option to its shortest unique prefix. You may
98 use two hyphens instead of one in options. You may separate an option
99 and its value either by an equals sign or white space.
100
101
102
103 -alphaout=alpha-filename
104 tifftopnm creates a PGM file containing the alpha channel values
105 in the input image. If the input image doesn't contain a trans‐
106 parency channel, the alpha-filename file contains all zero
107 (transparent) transparency values. If you don't specify
108 -alphaout,
109
110 tifftopnm does not generate a transparency file, and if the
111 input image has an transparency channel, tifftopnm simply dis‐
112 cards it.
113
114 If you specify - as the filename, tifftopnm writes the trans‐
115 parency output to Standard Output and discards the image.
116
117 See pamcomp(1) for one way to use the transparency output file.
118
119
120 -respectfillorder
121 By default, tifftopnm ignores the "fillorder" tag in the TIFF
122 input, which means it may incorrectly interpret the image. To
123 make it follow the spec, use this option. For a lengthy but
124 engaging discussion of why tifftopnm works this way and how to
125 use the -respectfillorder option, see the note on fillorder
126 below.
127
128
129 -byrow This option can make tifftopnm run faster.
130
131 tifftopnm has two ways to do the conversion from Tiff to PNM,
132 using respectively two facilities of the TIFF library:
133
134
135
136
137 Whole Image
138 Decode the entire image into memory at once, using TIFFRGBAIm‐
139 ageGet(), then convert to PNM and output row by row.
140
141
142 Row By Row
143 Read, convert, and output one row at a time using TIFFReadScan‐
144 line()
145
146
147
148 Whole Image is preferable because the Tiff library does more of
149 the work, which means it understands more of the Tiff format
150 possibilities now and in the future. Also, some compressed TIFF
151 formats don't allow you to extract an individual row.
152
153 Row By Row uses far less memory, which means with large images,
154 it can run in environments where Whole Image cannot and may also
155 run faster. And because Netpbm code does more of the work, it's
156 possible that it can be more flexible or at least give better
157 diagnostic information if there's something wrong with the TIFF.
158
159 The Netpbm native code may do something correctly that the TIFF
160 library does incorrectly, or vice versa.
161
162 In Netpbm, we stress function over performance, so by default we
163 try Whole Image first, and if we can't get enough memory for the
164 decoded image or TIFFRGBAImageGet() fails, we fall back to Row
165 By Row. But if you specify the -byrow option, tifftopnm will
166 not attempt Whole Image. If Row By Row does not work, it simply
167 fails.
168
169 See Color Separation (CMYK) TIFFs ⟨#cmyk⟩ for a description of
170 one way Row By Row makes a significant difference in your
171 results.
172
173 Whole Image costs you precision when your TIFF image uses more
174 than 8 bits per sample. TIFFRGBAImageGet() converts the samples
175 to 8 bits. tifftopnm then scales them back to maxval 65535, but
176 the lower 8 bits of information is gone.
177
178 In many versions of the TIFF library, TIFFRGBAImageGet() does
179 not correctly interpret TIFF files in which the raster orienta‐
180 tion is column-major (i.e. a row of the raster is a column of
181 the image). With such a TIFF library and file, you must use
182 -byrow to get correct output.
183
184 Before Netpbm 10.11 (October 2002), tifftopnm always did Row By
185 Row. Netpbm 10.12 always tried Whole Image first. -byrow came
186 in with Netpbm 10.13 (January 2003).
187
188
189 -orientraw
190 A TIFF stream contains raster data which can be arranged in the
191 stream various ways. Most commonly, it is arranged by rows,
192 with the top row first, and the pixels left to right within each
193 row, but many other orientations are possible.
194
195 The common orientation is the same one the Netpbm formats use,
196 so tifftopnm can do its jobs quite efficiently when the TIFF
197 raster is oriented that way.
198
199 But if the TIFF raster is oriented any other way, it can take a
200 considerable amount of processing for tifftopnm to convert it to
201 Netpbm format.
202
203 -orientraw says to produce an output image that represents the
204 raw raster in the TIFF stream rather than the image the TIFF
205 stream is supposed to represent. In the output, the top left
206 corner corresponds to the start of the TIFF raster, the next
207 pixel to the right is the next pixel in the TIFF raster, etc.
208 tifftopnm can do this easily, but you don't get the right image
209 out. You can use pamflip to turn the output into the image the
210 TIFF stream represents (but if you do that, you pretty much lose
211 the benefit of -orientraw).
212
213 With this option, tifftopnm always uses the Row By Row method
214 (see -byrow).
215
216 This option was new in Netpbm 10.42 (March 2008). Before that,
217 tifftopnm generally produces arbitrary results with TIFF images
218 that have an orientation other than the common one.
219
220
221 -verbose
222 Print extra messages to Standard Error about the conversion.
223
224
225 -headerdump
226 Dump TIFF file information to stderr. This information may be
227 useful in debugging TIFF file conversion problems.
228
229
230
231
233 Fillorder
234 There is a piece of information in the header of a TIFF image called
235 "fillorder." The TIFF specification quite clearly states that this
236 value tells the order in which bits are arranged in a byte in the
237 description of the image's pixels. There are two options, assuming
238 that the image has a format where more than one pixel can be repre‐
239 sented by a single byte: 1) the byte is filled from most significant
240 bit to least significant bit going left to right in the image; and 2)
241 the opposite.
242
243 However, there is confusion in the world as to the meaning of fil‐
244 lorder. Evidence shows that some people believe it has to do with byte
245 order when a single value is represented by two bytes.
246
247 These people cause TIFF images to be created that, while they use a
248 MSB-to-LSB fillorder, have a fillorder tag that says they used LSB-to-
249 MSB. A program that properly interprets a TIFF image will not end up
250 with the image that the author intended in this case.
251
252 For a long time, tifftopnm did not understand fillorder itself and
253 assumed the fillorder was MSB-to-LSB regardless of the fillorder tag in
254 the TIFF header. And as far as I know, there is no legitimate reason
255 to use a fillorder other than MSB-to-LSB. So users of tifftopnm were
256 happily using those TIFF images that had incorrect fillorder tags.
257
258 So that those users can continue to be happy, tifftopnm today continues
259 to ignore the fillorder tag unless you tell it not to. (It does, how‐
260 ever, warn you when the fillorder tag does not say MSB-to-LSB that the
261 tag is being ignored).
262
263 If for some reason you have a TIFF image that actually has LSB-to-MSB
264 fillorder, and its fillorder tag correctly indicates that, you must use
265 the -respectfillorder option on tifftopnm to get proper results.
266
267 Examples of incorrect TIFF images are at ftp://weather.noaa.gov.
268 ⟨ftp://weather.noaa.gov.⟩ They are apparently created by a program
269 called faxtotiff.
270
271 This note was written on January 1, 2002.
272
273
274
275 Color Separation (CMYK) TIFFs
276 Some TIFF images contain color information in CMYK form, whereas PNM
277 images use RGB. There are various formulas for converting between
278 these two forms, and tifftopnm can use either of two.
279
280 The TIFF library (Version 3.5.4 from libtiff.org) uses Y=(1-K)*(1-B)
281 (similar for R and G) in its TIFFRGBAImageGet() service. When
282 tifftopnm works in Whole Image mode, it uses that service, so that's
283 the conversion you get.
284
285 But when tifftopnm runs in Row By Row mode, it does not use TIFFRGBAIm‐
286 ageGet(), and you get what appears to be more useful: Y=1-(B+K). This
287 is the inverse of what pnmtotiffcmyk does.
288
289 See the -byrow option for more information on Whole Image versus Row By
290 Row mode.
291
292 Before Netpbm 10.21 (March 2004), tifftopnm used the Y=(1-K)*(1-B) for‐
293 mula always.
294
295
296
298 pnmtotiff(1), pnmtotiffcmyk(1), pamcomp(1), pnm(1)
299
300
302 Derived by Jef Poskanzer from tif2ras.c, which is Copyright (c) 1990 by
303 Sun Microsystems, Inc. Author: Patrick J. Naughton
304 (naughton@wind.sun.com).
305
307 This manual page was generated by the Netpbm tool 'makeman' from HTML
308 source. The master documentation is at
309
310 http://netpbm.sourceforge.net/doc/tifftopnm.html
311
312netpbm documentation 02 January 2015 Tifftopnm User Manual(0)