1Tifftopnm User Manual(0)                              Tifftopnm User Manual(0)
2
3
4

NAME

6       tifftopnm - convert a TIFF file into a PNM image
7
8

SYNOPSIS

10       tifftopnm
11
12       [-alphaout={alpha-filename,-}]  [-headerdump]  [-verbose] [-respectfil‐
13       lorder] [-byrow] [-orientraw] [tiff-filename]
14
15
16

DESCRIPTION

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

OPTIONS

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

NOTES

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

SEE ALSO

280       pnmtotiff(1), pnmtotiffcmyk(1), pamcomp(1), pnm(1)
281
282

AUTHOR

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)
Impressum