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