The TIFF File Format

Also known as: TIF


Original Documentation

--------I-TIFF------------------------------
The TIFF file format was designed jointly by Aldus and Microsoft with leading
scanner vendors to faciliate incorporating scanned images into publishing.
The described TIFF specification is TIFF 5.0. A TIFF file consists of several
different blocks which define the palette data or the LZW-compressed body
among other things. TIFF files can be in Motorola _or_ Intel byte order,
depending on the first word. If it is 'II', the byte order is in Intel order,
if it is 'MM', then you have Motorola byte ordering.

Each TIFF file begins with a image file header which points to one or more image
file directories, which contain the image data and image information.

The format of the image header :
OFFSET              Count TYPE   Description
0000h                   2 char   ID='II', ID='MM'
								 This is the identification, 'II' stands for
								 Intel byte order, 'MM' for Motorola byte
								 order. The following data must be interpreted
								 accordingly !
0002h                   1 word   TIFF "version number". This version number
								 never changed and the value (42) was choosen
								 for its deep philosophical value. In fact, if
								 the version number ever changes, this means
								 that radical changes to the TIFF format have
								 been made, and a TIFF reader should give up
								 immediately.
								 You can consider this word to be a part of the
								 header ID.
0004h                   1 dword  Offset of first image directory in file form
								 start of file.
								 The first image directory must begin on an
								 even byte boundary. The image directory may
								 follow the image data it describes. The
								 image directory is described below.

An organization  may wish to store information that is meaningful to only that
organization in a TIFF file. Tags numbered 32768 or higher are reserved for
that purpose. Upon request, the administrator will allocate and register a block
of private tags for an  organization.
Private enumerated values can be accommodated in a similar fashion.

The format of the image file directory (IFD) :
All entries are sorted in ascending order by the tag field.
OFFSET              Count TYPE   Description
0000h                   1 word   Number of entries
								 ="NUM"
0002h               "NUM" rec    Field descriptor
						1 word   Field tag, see below
						1 word   Field type
								   1 - byte
								   2 - ASCII string, counted in length.
									   Most often an ASCIIZ string, the
									   trailing zero is counted with the
									   data length.
								   3 - word
								   4 - dword / uword
								   5 - rational (2 dwords, numerator and denominator)
						1 dword  Length of the field in units of the data type.
								 A single 16-bit word has the length 1.
						1 dword  Data offset of the field. The data starts
								 on a word boundary, thus the dword should
								 be even. The data for the field may be
								 anywhere in the file, even after the image
								 data. If the data size is less or equal to
								 4 bytes (determined by the field type and
								 length), then this offset is not a offset
								 but instead the data itself, to save space.
								 If the data size is less than 4 bytes, the
								 data is stored left-justified within the 4
								 bytes of the offset field.
0002h+
 "NUM"*12               1 dword  Offset of next IFD in file, 0 if none follow

If a certain field in the IFD does not exist, you have to presume the default
values. The different fields are :

--- BitsPerSample
Tag  = 258  (102)
Type = word
N    = SamplesPerPixel
Default = 1

Number of bits per sample. Note that this tag allows a different number of
bits per sample for each sample corresponding to a pixel. For example, RGB
color data could use a different number of bits per sample for each of the
three color planes.

--- ColorMap
Tag  = 320 (140)
Type = word
N    = 3 * (2**BitsPerSample)
No default.ColorMap must be included in all palette color images.

This tag defines a Red-Green-Blue color map for palette color images.
The palette color pixel value is used to index into all 3 subcurves.
The subcurves are stored sequentially. The Red entries come first, followed
by the Green entries, followed by the Blue entries.
The width  of each entry is 16 bits, as implied by the type of word.
0 represents the minimum intensity, and 65535 represents the maximum intensity.

--- ColorResponseCurves
Tag  = 301 (12D)
Type = word
N    = 3 * (2**BitsPerSample)
Default: curves based on the NTSC recommended gamma of 2.2.

This tag defines three color response curves, one each for Red, Green and Blue
color information. The Red entries come first, followed by the Green entries,
followed by the Blue entries. The length of each subcurve is  2**BitsPerSample,
using the BitsPerSample value corresponding to the respective primary. The width
of each entry is 16 bits, as implied by the type of word.
The purpose of the color response curves is to refine the content of RGB color images.

--- Compression
Tag  = 259  (103)
Type = word
N    = 1
Default = 1.

1 =  No compression, but pack data into bytes as tightly as possible, with no
	 unused  bits except  at the end of a row. The bytes are stored as an array
	 of bytes, for BitsPerSample <= 8,  word if BitsPerSample > 8 and <= 16, and
	 dword if BitsPerSample > 16 and <= 32. The byte ordering of data >8 bits
	 must be consistent with that specified in the TIFF file header (bytes 0
	 and 1). Rows are required to  begin on byte boundaries.

2 =  CCITT Group 3 1-Dimensional Modified Huffman run length encoding.
	 See ALGRTHMS.txt BitsPerSample must be 1, since this type of compression
	 is defined only for bilevel images (like FAX images...)

3 =  Facsimile-compatible CCITT  Group 3, exactly as specified in
	 "Standardization of  Group 3  facsimile  apparatus  for  document
	 transmission,"   Recommendation T.4,  Volume VII, Fascicle VII.3,
	 Terminal Equipment  and Protocols  for  Telematic  Services,  The
	 International  Telegraph  and  Telephone  Consultative  Committee
	 (CCITT), Geneva,  1985, pages  16 through  31.   Each strip  must
	 begin on  a byte  boundary.   (But recall  that an image can be a
	 single strip.)   Rows  that are  not the first row of a strip are
	 not required  to begin on a byte boundary.  The data is stored as
	 bytes,  not words - byte-reversal  is   not  allowed.    See  the
	 Group3Options field for Group 3 options such as 1D vs 2D coding.

4 =  Facsimile-compatible CCITT  Group 4, exactly as specified in
	 "Facsimile Coding  Schemes and Coding Control Functions for Group
	 4 Facsimile Apparatus,"  Recommendation T.6, Volume VII, Fascicle
	 VII.3, Terminal  Equipment and  Protocols for Telematic Services,
	 The International  Telegraph and Telephone Consultative Committee
	 (CCITT), Geneva,  1985, pages  40 through  48.   Each strip  must
	 begin on  a byte  boundary.  Rows that are not the first row of a
	 strip are  not required to begin on a byte boundary.  The data is
	 stored as  bytes, not  words.   See the  Group4Options field  for
	 Group 4 options.

5 =  LZW Compression, for grayscale, mapped color, and full color images.
	 See ALGRTHMS.txt

32773 =  PackBits compression, a simple byte oriented run length scheme for
		 1-bit images.  See Appendix C.

		  Data compression only applies to raster image data, as pointed to
		  by StripOffsets.

--- GrayResponseCurve
Tag  = 291 (123)
Type = word
N    = 2**BitsPerSample

The purpose  of the  gray response curve and the gray units is to
provide more  exact photometric  interpretation  information  for
gray scale image data, in terms of optical density.

--- GrayResponseUnit
Tag  = 290 (122)
Type = word
N    = 1
For historical  reasons, the  default is 2.  However, for greater
accuracy, 3 is recommended.

  1 = Number represents tenths of a unit.
  2 = Number represents hundredths of a unit.
  3 = Number represents thousandths of a unit.
  4 = Number represents ten-thousandths of a unit.
  5 = Number represents hundred-thousandths of a unit.

--- ImageLength
Tag  = 257  (101)
Type = word or dword
N    = 1
No default.

The image's length (height) in pixels (Y:vertical). The number of rows
(sometimes described as "scan lines") in the image.

--- ImageWidth
Tag  = 256  (100)
Type = word or dword
N    = 1
No default.

The image's width, in pixels (X:horizontal). The number of columns in the image.

--- NewSubfileType
Tag =  254  (FE)
Type = dword
N = 1
Default is 0.

A general  indication of  the kind  of data  that is contained in
this subfile.   This  field is  made up of a set of 32 flag bits.
Unused bits are expected to be 0.  Bit 0 is the low-order bit.

		  Currently defined values for the bitmap are:
			0 - Image is reduced of another TIFF image in this file
			1 - Image is a single page of a multi-page
			2 - Image is a transparency mask for another image in this file

--- PhotometricInterpretation
Tag  = 262  (106)
Type = word
N    = 1
No default.

0 =  For bilevel  and grayscale  images:   0 is  imaged as white.
	 2**BitsPerSample-1 is  imaged as  black.    If  GrayResponseCurve
	 exists,  it   overrides  the   PhotometricInterpretation   value.

1 =  For bilevel  and grayscale  images:   0 is  imaged as black.
	 2**BitsPerSample-1  is  imaged  as  white.  If  GrayResponseCurve
	 exists,  it   overrides  the   PhotometricInterpretation   value.

2 =  RGB.  In the RGB model, a color is described as a combination
	 of the  three primary  colors of  light (red, green, and blue) in
	 particular concentrations.   For  each of  the three  samples,  0
	 represents minimum intensity, and 2**BitsPerSample - 1 represents
	 maximum intensity. For PlanarConfiguration = 1, the samples are stored in
	 the indicated  order:   first Red,  then Green,  then Blue.   For
	 PlanarConfiguration =  2, the  StripOffsets for the sample planes
	 are stored  in the  indicated order:   first the Red sample plane
	 StripOffsets, then  the Green  plane StripOffsets,  then the Blue
	 plane StripOffsets.

3 =  "Palette color."     In this  mode, a color is described with a
	 single sample.   The  sample is  used as  an index into ColorMap.
	 The sample  is used to index into each of the red, green and blue
	 curve tables to retrieve an RGB triplet defining an actual color.
	 When this  PhotometricInterpretation value  is  used,  the  color
	 response curves  must also  be supplied.  SamplesPerPixel must be
	 1.

4 =  Transparency Mask.   This  means that  the image  is used to
	 define an  irregularly shaped region of another image in the same
	 TIFF  file.     SamplesPerPixel  and  BitsPerSample  must  be  1.
	 PackBits compression  is recommended.    The  1-bits  define  the
	 interior of  the region;  the 0-bits  define the  exterior of the
	 region.  The Transparency Mask must have the same ImageLength and
	 ImageWidth as the main image.

PlanarConfiguration
Tag  = 284  (11C)
Type = word
N    = 1
Default is 1.

1 =  The sample values for each pixel are stored contiguously, so
	 that there is a single image plane. See PhotometricInterpretation
	 to determine the order of the samples within the  pixel data. So, for
	 RGB data, the data is stored RGBRGBRGB...and so on.

2 =  The samples  are stored  in separate  "sample planes."   The
	 values in StripOffsets and StripByteCounts are then arranged as a
	 2-dimensional array, with SamplesPerPixel rows and StripsPerImage
	 columns.      (All of  the columns  for row  0 are  stored first,
	 followed   by    the   columns    of   row   1,   and   so   on.)
	 PhotometricInterpretation describes  the type  of  data  that  is
	 stored in  each sample  plane.   For example,  RGB data is stored
	 with the  Red samples  in one sample plane, the Green in another,
	 and the Blue in another.

	 If SamplesPerPixel  is 1,  PlanarConfiguration is irrelevant, and
	 should not be included.

Predictor
Tag  = 317 (13D)
Type = word
N    = 1
Default is 1.

To be used when Compression=5 (LZW).

1 = No prediction scheme used before coding.
2 = Horizontal differencing. See Appendix I.

ResolutionUnit
Tag  = 296 (128)
Type = word
N    = 1
Default is 2.

To be used with XResolution and YResolution.

1 =  No absolute  unit of  measurement.  Used for images that may
	 have a  non-square  aspect  ratio,  but  no  meaningful  absolute
	 dimensions.   The drawback  of ResolutionUnit=1 is that different
	 applications will  import the  image at different sizes.  Even if
	 the decision  is quite  arbitrary, it might be better to use dots
	 per inch  or  dots  per  centimeter,  and  pick  XResolution  and
	 YResolution such that the aspect ratio is correct and the maximum
	 dimension of  the image is about four inches (the "four" is quite
	 arbitrary.)
2 = Inch.
3 = Centimeter.

RowsPerStrip
Tag  = 278  (116)
Type = word or dword
N    = 1
Default is  2**32 -  1, which  is effectively infinity.  That is,
the entire  image is  one strip.   Recomended is a strip size of 8K.

The number  of rows  per strip.  The image data is organized into
strips for  fast access  to individual  rows  when  the  data  is
compressed - though this field is valid even  if the  data is not
compressed.

--- SamplesPerPixel
Tag  = 277  (115)
Type = word
N    = 1
Default = 1.

The number  of samples  per pixel.    SamplesPerPixel  is  1  for
bilevel, grayscale, and palette color images.  SamplesPerPixel is
3 for RGB images.

--- StripByteCounts
Tag  = 279  (117)
Type = word or dword
N    = StripsPerImage for PlanarConfiguration equal to 1.
	 = SamplesPerPixel  * StripsPerImage  for PlanarConfiguration equal to 2
No default.

For each strip, the number of bytes in that strip.  The existence
of  this   field  greatly   simplifies  the  chore  of  buffering
compressed data, if the strip size is reasonable.

--- StripOffsets
Tag  = 273  (111)
Type = word or dword
N    = StripsPerImage for PlanarConfiguration equal to 1.
	 = SamplesPerPixel  * StripsPerImage  for PlanarConfiguration equal to 2
No default.

For each  strip, the  byte offset  of that  strip.  The offset is
specified with  respect to  the beginning of the TIFF file.  Note
that this  implies that  each strip has a location independent of
the locations  of other  strips.   This feature may be useful for
editing applications.  This field is the only way for a reader to
find the image data, and hence must exist.

--- XResolution
Tag  = 282  (11A)
Type = RATIONAL
N    = 1
No default.

The number of pixels per ResolutionUnit in the X direction, i.e.,
in the  ImageWidth direction.


--- YResolution
Tag  = 283  (11B)
Type = RATIONAL
N    = 1
No default.

The number of pixels per ResolutionUnit in the Y direction, i.e.,
in the ImageLength direction.

--- Artist
Tag  = 315  (13B)
Type = ASCII

Person who created the image. Copyright notice.

--- DateTime
Tag  = 306  (132)
Type = ASCII
N    = 20

Date and time of image creation. Uses the format  "YYYY:MM:DD HH:MM:SS", with
hours on a 24-hour clock, and one space character between the date and the time.
The length of the string, including the null, is 20 bytes.

--- HostComputer
Tag  = 316  (13C)
Type = ASCII

"ENIAC", or whatever.

--- ImageDescription
Tag  = 270 (10E)
Type = ASCII

For example,  a user  may wish  to attach a comment such as "1988 company
picnic" to an image.

--- Make
Tag  = 271  (10F)
Type = ASCII

Manufacturer of the scanner, video digitizer, or whatever.

--- Model
Tag  = 272  (110)
Type = ASCII

The model name/number of the scanner, video digitizer, or whatever.
This tag is intended for user information only so format is arbitrary.

--- Software
Tag  = 305  (131)
Type = ASCII

Name and  release number of the software package that created the image.
User information only.

--- Group3Options
Tag  = 292  (124)
Type = dword
N    = 1

Those options are for fax-images stored in TIFF format.
This  field is  made up  of a set of 32 flag bits. Unused bits are expected
to be 0. It is probably not safe to try to read the file if any bit of this
field is set that you don't know the meaning of.

 Bit map :
 0 - 2-dimensional coding used.
 1 - Image is uncompressed
 2 - Fill bits have been added before EOL codes, so that EOL always ends on a
	 byte boundary.

--- Group4Options
Tag  =  293  (125)
Type = dword
N    = 1

This field is made up of a set of 32 flag bits and is used for the images
with fax group 4 compression. Unused bits are expected to be 0. It is
probably not safe to try to read the file if any bit of this field is set
that you don't know the meaning of. Gray scale and color coding schemes are
under study, and will be added when finalized.

For 2-D coding, each strip is encoded as if it were a separate image. In
particular, each strip begins on a byte boundary; and the coding  for the
first row of a strip is encoded independently of the previous row, using
horizontal codes, as if the previous row is entirely white. Each strip ends
with the 24-bit end-of-facsimile block (EOFB).

Bit map :
		 0 - reserved (unused)
		 1 - uncompressed mode is used
	  2-31 - reserved

--- DocumentName
Tag  = 269  (10D)
Type = ASCII

The name of the document from which this image was scanned.

--- PageName
Tag  = 285  (11D)
Type = ASCII

The name of the page from which this image was scanned.

--- PageNumber
Tag  = 297  (129)
Type = word
N    = 2

This tag is used to specify page numbers of a multiple page (e.g. facsimile)
document. Two word values are specified. The first value is the page number;
the second value is the total number of pages in the document. Note that pages
need not appear in numerical order. The first page is 0 (zero).

--- XPosition
Tag  = 286  (11E)
Type = RATIONAL

The X offset of the left side of the image, with respect to the left side of the
page, in ResolutionUnits.

--- YPosition
Tag  = 287  (11F)
Type = RATIONAL

The Y  offset of the top of the image, with respect to the top of the page, in
ResolutionUnits.  In the TIFF coordinate scheme, the positive Y direction is down,
so that YPosition is always positive.

--- White Point
Tag  = 318 (13E)
Type = RATIONAL
N    = 2
Default is the SMPTE white point, D65:  x = 0.313, y = 0.329.

The white  point of the image.  Note that this value is described using the 1931
CIE xyY chromaticity diagram and only the chromaticity is specified. The
luminance component is arbitrary and not  specified. This can correspond to the
white point of a monitor that the image was painted  on, the filter set/light
source combination of a scanner, or to the white point of the illumination model
of a rendering package. The ordering is x, y.


--- PrimaryChromaticities
Tag  = 319 (13F)
Type = RATIONAL
N    = 6
Default is the SMPTE primary color chromaticities:

			   Red: x = 0.635 y = 0.340
			   Green:    x = 0.305 y = 0.595
			   Blue:     x = 0.155 y = 0.070

The primary  color chromaticities. Note that these values are described using
the 1931 CIE xyY chromaticity diagram and only the chromaticities  are
specified.For paint images, these represent the chromaticities of the monitor
and for scanned images they are derived from the filter set/light source
combination of a scanner.
The ordering is red x, red y, green x, green y, blue x, blue y.

--- SubfileType
Tag  = 255  (FF)
Type = word
N    = 1

A general indication of the kind of data that is contained in this subfile.
Currently defined values are:

1 =  full resolution image data - ImageWidth, ImageLength, and StripOffsets are
	 required fields
2 =  reduced resolution image data - ImageWidth, ImageLength, and StripOffsets are
	 required fields. It is further assumed that a reduced resolution image is a
	 reduced version of the entire extent of the corresponding full resolution
	 data.
3 =  single page of a multi-page image (see the PageNumber tag description).

Continued use of this field is not recommended. Writers should instead use the
new and more general NewSubfileType field.

--- Orientation
Tag  = 274 (112)
Type = word
N    = 1
Default is 1.

1 =  The 0th  row represents the visual top of the image, and the 0th column
	 represents the visual left hand side.
2 =  The 0th  row represents the visual top of the image, and the 0th column
	 represents the visual right hand side.
3 =  The 0th  row represents  the visual bottom of the image, and the 0th column
	 represents the visual right hand side.
4 =  The 0th  row represents  the visual bottom of the image, and the 0th column
	 represents the visual left hand side.
5 =  The 0th row represents the visual left hand side of the image, and the 0th
	 column represents the visual top.
6 =  The 0th row represents the visual right hand side of the image, and the 0th
	 column represents the visual top.
7 =  The 0th row represents the visual right hand side of the image, and the 0th
	 column represents the visual bottom.
8 =  The 0th row represents the visual left hand side of the image, and the 0th
	 column represents the visual bottom.

It is extremely costly for most readers to perform image rotation "on the  fly",
 i.e., when importing and printing; and users of most desktop publishing
applications do not expect a file imported by the application to be altered
permanently in any way.

Threshholding
Tag  = 263  (107)
Type = word
N    = 1

1 =  a bilevel "line art"  scan. BitsPerSample must be 1.
2 =  a "dithered" scan, usually of continuous tone data such as photographs.
	 BitsPerSample must be 1.
3 =  Error Diffused.

ColorImageType
Tag  = 318 (13E)
Type = word
N    = 1
Default is 1.

Gives TIFF color image readers a better idea of what kind of color image it is.  There will be borderline cases.

1 = Continuous tone, natural image.
2 = Synthetic image, using a greatly restricted range of colors.
	Such images are produced by most color paint programs. See ColorList for
	a list of colors used in this image.

ColorList
Tag  = 319 (13F)
Type = BYTE or word
N    = the number of colors that are used in this image, times SamplesPerPixel

A list of colors that are used in this image. Use of this field is only
practical for images containing a greatly restricted (usually less than or equal
to 256) range of colors. ColorImageType should be 2. See ColorImageType.

The list is organized as an array of RGB triplets, with no pad. The RGB triplets
are not guaranteed to be in any particular order. Note that the red, green, and
blue components can either be a BYTE or a word in length. BYTE should be
sufficient for most applications.

EXTENSION:TIF,TIFF
OCCURENCES:PC,MAC,UNIX
PROGRAMS:Aldus Pagemaker, Paintbrush
REFERENCE:
SEE ALSO:
VALIDATION:

This information is from Corion.net and is used with permission.

More Resources