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