Профессиональный цифровой диммер и пульт DMX512
Программа управления световыми приборами DMX512
Фонтаны, визуализация Изготовление фонтанов и оборудования


Формат  TIF

 

     
 

Tag Image File Format  Rev 4.0

April 31, 1987

This memorandum has been prepared jointly by Aldus and Microsoft in conjunction with leading scanner and printer manufacturers.  This document does not represent a commitment on the part of either Microsoft or Aldus to provide support for this file format in any application.  When responding to specific issues raised in this memo, or when requesting additional tag or field assignments, please address your correspondence to either:

Tim Davenport                                                                     Manny Vellon

Aldus Corporation                                                               Windows Marketing Group

411 First Ave. South                                                            Microsoft Corporation

Suite 200                                                                                16011 NE 36th Way

Seattle, WA  98104                                                              Box 97017

Redmond, WA  98073-9717

Revision Notes

This release of the TIFF specification has been given a Revision number.  It is really the fourth major revision, so the Revision number was set to 4.0.

Abstract

This document describes TIFF, a tag based file format that is designed to promote the interchange of digital image data.

The fields were defined primarily with desktop publishing and related applications in mind, although it is conceivable that other sorts of imaging applications may find TIFF to be useful.

The general scenario for which TIFF was invented assumes that applications software for scanning or painting creates a TIFF file, which can then be read and incorporated into a document or publication by an application such as a desktop publishing package.

The intent of TIFF is to organize and codify existing practice with respect to the definition and usage of desktop digital data, not to blaze new paths or promote unproven techniques.  Yet a very high priority has been given to structuring the data in such a way as to minimize the pain of future additions. TIFF was designed to be a very extensible interchange format.

TIFF is not a printer language or page description language, nor is it intended to be a general document interchange standard.  It may be useful as is for some image editing applications, but is probably inappropriate for and would thus need to be translated into some intermediate data structures by other image editing applications.  The primary design goal was to provide a rich environment within which the exchange of image data between application programs can be accomplished.  This richness is required in order to take advantage of the varying capabilities of scanners and similar devices.  TIFF is therefore designed to be a superset of existing image file formats for desktop scanners (and paint programs and anything else that produces images with pixels in them) and will be enhanced on a continuing basis as new capabilities arise.

Although TIFF is claimed to be in some sense a rich format, it can easily be used for simple scanners and applications as well, since the application developer need only be concerned with the capabilities that he requires.  The mechanisms for accomplishing this goal are discussed in the next section.

TIFF is intended to be independent of specific operating systems, filing systems, compilers, and processors.  The only significant assumption is that the storage medium supports something like a file, defined as a sequence of 8-bit bytes, where the bytes are numbered from 0 to N.  The largest possible TIFF file is 2**32 bytes.  Since pointers (byte offsets) are used liberally, a TIFF file is most easily read from a random access device, although it is possible to read and write TIFF files on sequential media such as magnetic tape.

The recommended MS-DOS file extension for TIFF files is .TIF.  The recommended Macintosh filetype is TIFF.  Conventions in other computing environments have not yet been established.

1) Conformance

Many of the application programs that read the contents of TIFF image files will not support all of the features described in this document.  In some cases, little more than the default options will be supported.  It is up to each organization to determine the costs and benefits associated with different levels of conformity.  Therefore, claims of conformity to this specification should be interpreted with a certain amount of caution.

It follows that the usage of this specification does not preclude the need for coordination between image file writers and image file readers.  It is up to the application designer that initially writes a file in this format to verify that the desired file options are supported by the applications that will read the file.

2) Structure

In TIFF, individual fields are identified with a unique tag.  This allows particular fields to be present or absent from the file as required by the application.

Some TIFF files will have only a few fields in them; others will have many. Software that creates TIFF files should write out as many fields as it believes will be meaningful and useful (and no more).  Software that reads TIFF files should do the best it can with the fields that it finds there.

See Appendix A: Tag Structure Rationale.

There are many ways in which a tag-oriented file format scheme can be implemented.  TIFF uses the following approach:

There are three main parts to a TIFF file.  First is a short image file header. Next is a directory of all the fields that are to be found in this file. Finally, we have the data for the fields.

3) Header and Directory

A TIFF file begins with a small amount of positionally defined data, containing the following information:

Bytes 0-1:

The first word of the file serves to specify the byte order used within the file.  The currently defined values are:

II                        (hex 4949)

MM                   (hex 4D4D)

In the II format, byte order is always from least significant to most significant, for both 16-bit and 32-bit integers.

In the MM format, byte order is always from most significant to least significant, for both 16-bit and 32-bit integers.

In both formats, character strings are stored into sequential byte locations.

It is certainly not required that all applications software be able to handle both formats.  It should be apparent which is the native format for a particular machine.

Bytes 2-3:

The second word of the file is the TIFF version number.  This number shouldnt change.  This document describes Version 42, so 42 (2A in hex) should be stored in this word.

Bytes 4-7:

This long word contains the offset (in bytes) of the first Image File Directory.  The directory may be at any location in the file after the header but must begin on a word boundary.

(The term byte offset is always used in this document to refer to a location with respect to the beginning of the file.  The first byte of the file has an offset of 0.)

An IFD consists of a 2-byte count of the number of entries (i.e., the number of fields), followed by a sequence of 12-byte field entries, followed by a 4-byte offset of the next Image File Directory (or 0 if none).  Each 12-byte field entry has the following format:

Bytes 0-1 contain the Tag for the field.  Bytes 2-3 contain the field Type. Bytes 4-7 contain the Length (Count might have been a better term) of the field.  Bytes 8-11 contain the file offset (in bytes) of the Value for the field.  The Value is expected to begin on a word boundary; the corresponding file offset will thus be an even number.

The entries in an IFD must be sorted in ascending order by Tag.  Note that this

is not the order in which the fields are described in this document.  The

Values to which directory entries point need not be in any particular order in

the file.

If the Value fits within 4 bytes, the Offset is interpreted to contain the Value instead of pointing to the Value, to save a little time and space.  If the Value is less than 4 bytes, it is left-justified.  Whether or not it fits within 4 bytes can be determined by looking at the Type and Length of the field.

The Length part is specified in terms of the data type.  A single 16-bit word (SHORT) has a Length of 1, not 2, for example.  The data types and their lengths are described below:

1 = BYTE.                      8-bit unsigned integer.

2 = ASCII.                      8-bit bytes that store ASCII codes; the last byte must

be null.

3 = SHORT.                   A 16-bit (2-byte) unsigned integer.

4 = LONG.                      A 32-bit (4-byte) unsigned integer.

5 = RATIONAL.  Two LONGs: the first represents the numerator of a fraction, the second the denominator.

The value of the Length part of an ASCII field entry includes the null.  If padding is necessary, the Length does not include the pad byte.

The reader should check the type to ensure that it is what he expects.  TIFF currently allows more than 1 valid type for a given field.  For example, ImageWidth and ImageLength were specified as having type SHORT.  Very large images with more than 64k rows or columns are possible with some devices even now.  Rather than add parallel LONG tags for these fields, it is cleaner to allow both SHORT and LONG for ImageWidth and similar fields.  Writers of TIFF files are, however, encouraged to use the default type values as indicated in this document to insure compatbility with existing TIFF reader applications.

Note that there may be more than one IFD.  Each IFD is said to define a subfile.  One potential use of subsequent subfiles is to describe a sub-image that is somehow related to the main image, such as a reduced resolution or screen resolution image.  Another use is to represent multiple page images - for example, a facsimile document requiring more than one page.  Subsequent IFDs will in general contain many of the same fields as the first IFD but will usually point to or contain different Values for those fields.

4) Definitions

The TIFF structure itself is not specific to imaging applications in any way. It is only the definitions of the fields themselves that jointly describe an image.  Before we begin describing the fields, a few image related definitions may be useful.

An image is defined to be a rectangular array of pixels, each of which consists of one or more samples.  With monochromatic data, we have one sample per pixel, and sample and pixel can be used interchangeably.  Color data usually contains three samples per pixel, as in, for example, an RGB scheme.

5) The Fields

The following fields are defined in this version of TIFF.  More will be added in future versions, if possible in such a way so as not to break old software that encounters a newer TIFF file.  An attempt has been made to group related fields, although the grouping is necessarily somewhat arbitrary.

The documentation for each field contains the name of the field (quite arbitrary, but convenient), the Tag value, the field Type, the Number of Values (N) expected (per IFD, in the case of multiple subfiles), comments describing the field, and the default, if any.  The default value is used if the field does not exist.

A fairly large number of fields has already been defined, and the number will grow.  Please keep in mind that many common images can be described using only a handful of these fields (see the Examples section).

General Description

SubfileType

Tag  = 255  (FF)

Type = SHORT

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

If your kind of image data doesnt fit nicely into either description, contact either Aldus or Microsoft to define an additional value.  Note that both image types can be found in a single TIFF file, with each subfile described by its own IFD.

No default.

Data Architecture

ImageWidth

Tag  = 256  (100)

Type = SHORT

N    = 1

The images width, in pixels (X: horizontal).  The number of columns in the

image.

No default.

ImageLength

Tag  = 257  (101)

Type = SHORT

N    = 1

The images length (height) in pixels (Y: vertical).  The number of rows

(sometimes described as scan lines) in the image.  ImageLength and ImageWidth refer only to how the pixels are stored in the file and do not imply anything about where the visual top or left side of the image may be.  See Orientation for this information.

No default.

RowsPerStrip

Tag  = 278  (116)

Type = SHORT or LONG

N    = 1

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

Note that either SHORT or LONG values can be used to specify RowsPerStrip. SHORT values may be used for small TIFF files.  It should be noted, however, that earlier TIFF specifications required LONG values and that some software may not expect SHORT values.

Default is 2**32 - 1, which is effectively infinity.  That is, the entire image is one strip.

[StripsPerImage]

N    = 1

The number of strips per image.  This value is not a field, since it can be computed from two other fields, but it is convenient to give it a name in order to clarify the use of other fields.  The equation to use is StripsPerImage = (ImageLength + RowsPerStrip - 1) / RowsPerStrip, assuming integer arithmetic.

StripOffsets

Tag  = 273  (111)

Type = SHORT or LONG

N    = StripsPerImage for PlanarConfiguration equal to 1.

= SamplesPerPixel * StripsPerImage for PlanarConfiguration equal to 2

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 certain editing applications.  This field is the only way for a reader to find the image data, and hence must exist.

Note that either SHORT or LONG values can be used to specify the strip offsets. SHORT values may be used for small TIFF files.  It should be noted, however, that earlier TIFF specifications required LONG strip offsets and that some software may not expect SHORT values.

No default.

StripByteCounts

Tag  = 279  (117)

Type = LONG

N    = StripsPerImage for PlanarConfiguration equal to 1.

= SamplesPerPixel * StripsPerImage for PlanarConfiguration equal to 2

For each strip, the number of bytes in that strip.

No default.

SamplesPerPixel

Tag  = 277  (115)

Type = SHORT

N    = 1

The number of samples per pixel.  Usually 1 for monochromatic data and 3 for

color data (i.e. one sample for each of the color planes.)

Default = 1.

BitsPerSample

Tag  =         258  (102)

Type =        SHORT

N    =           SamplesPerPixel

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.

Default = 1.

PlanarConfiguration

Tag  = 284  (11C)

Type = SHORT

N    = 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.

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.

If SamplesPerPixel is 1, a PlanarConfiguration value of 1 is equivalent to a value of 2.

No default.

Compression

Tag  = 259  (103)

Type = SHORT

N    = SamplesPerPixel for PlanarConfiguration equal to 1 or 2.

Note that a value is provided for each sample, allowing different compression

schemes to be applied to different planes of data.

1 = No compression, but pack data into bytes as tightly as possible, with no unused bits except at the end of a row.  See also FillOrder.  The bytes are stored as an array of type BYTE, for BitsPerSample <= 8, SHORT if BitsPerSample > 8 and <= 16, and LONG 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).  Intel format files will have the least significant bytes preceeding the most significant bytes while Motorola format files will have the opposite.

If the number of bits per sample is not a power of 2, and you are willing to give up some space for better performance, you may wish to use the next higher power of 2.  For example, if your data can be represented in 6 bits, you may wish to specify that it is 8 bits deep.  If you take this approach, you should be sure that MinSampleValue and MaxSampleValue are given correct values (probably 0 and 63 for intrinsically 6-bit data.)  TIFF file readers should use MinSampleValue and MaxSampleValue to determine the range of values in the data rather than BitsPerSample.

Rows are required to begin on byte boundaries.

2 = CCITT Group 3 1-Dimensional Modified Huffman run length encoding.  See Appendix B: Data Compression Scheme 2.  BitsPerSample must be 1, since this type of compression is defined only for binary 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.  Note that the FillOrder field still applies.  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.  Note that the FillOrder field still applies.  See the Group4Options field for Group 4 options.

32771 = the same thing as Compression type 1 (no compression), except that each

row begins on the next available word boundary, instead of byte boundary.

32773 = PackBits compression, a relatively simple byte-oriented run-length

scheme.  See Appendix C.

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

All other TIFF information is unaffected.

To be determined are additional compression schemes for gray and colored images.  We encourage your suggestions, especially if accompanied by full specifications and performance information.  It is of course desirable to minimize the number of compression schemes that are being used, but this is clearly an area in which extremely significant time and space tradeoffs exist. Default = 1.

Group3Options

Tag  = 292  (124)

Type = LONG

N    = 1

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.  It is probably not safe to try to read the file if any bit of this field is set that you dont know the meaning of.

Bit 0 is 1 for 2-dimensional coding (else 1-dimensional is assumed).  For 2-D coding, if more than one strip is specified, each strip must begin with a 1-dimensionally coded line.  That is, RowsPerStrip should be a multiple of Parameter K as documented in the CCITT specification.

Bit 1 is 1 if uncompressed mode is used.

Bit 2 is 1 if fill bits have been added as necessary before EOL codes such that EOL always ends on a byte boundary, thus ensuring an eol-sequence of a 1 byte preceded by a zero nibble: xxxx-0000 0000-0001.

Default is 0, for basic 1-dimensional coding.

Group4Options

Tag  =  293  (125)

Type = LONG

N    = 1

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.  It is probably not safe to try to read the file if any bit of this field is set that you dont 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 0 is unused.

Bit 1 is 1 if uncompressed mode is used.

Default is 0, for basic 2-dimensional binary compression.

FillOrder

Tag  = 266  (10A)

Type = SHORT

N    = 1

The order of data values within a byte.

1 = most significant bits of the byte are filled first.  That is, data values (or code words) are ordered from high order bit to low order bit within a byte.

2 = least significant bits are filled first.

Default is FillOrder = 1.

Threshholding

Tag  = 263  (107)

Type = SHORT

N    = 1

1 = a bilevel line art scan.  BitsPerSample must be 1.

2 = a halftone or dithered scan, usually of continuous tone data such as photographs.  BitsPerSample must be 1.

3 = Error Diffused.

Default is Threshholding = 1.

CellWidth

Tag  = 264  (108)

Type = SHORT

N    = 1

The width, in 1-bit samples, of the dithering/halftoning matrix.  Assumes that

Threshholding = 2.  That is, this field is only relevant if Threshholding = 2.

No default.

CellLength

Tag  = 265  (109)

Type = SHORT

N    = 1

The length, in 1-bit samples, of the dithering/halftoning matrix.  Assumes that

Threshholding = 2.  This field and the previous field may be useful for

converting from halftoned to true gray level data.

No default.

Photometrics

These fields are useful in determining the visual meaning of the sample data.

MinSampleValue

Tag  = 280  (118)

Type = SHORT

N    = SamplesPerPixel

The minimum valid sample value.

Default is 0.

MaxSampleValue

Tag  = 281  (119)

Type = SHORT

N    = SamplesPerPixel

The maximum valid sample value.

Default is 2**(BitsPerSample) - 1.

PhotometricInterpretation

Tag  = 262  (106)

Type = SHORT

N    = 1

0 = MinSampleValue should be imaged as white.  MaxSampleValue should be imaged

as black.  If the bit-map represents gray scale, then the values between the minimum and maximum sample values should be interpreted according to either the gray scale response curve information (if included) or according to the result of some more arbitrary rule.  See GrayResponseCurve.

1 = MinSampleValue should be imaged as black.  MaxSampleValue should be imaged as white.  If the bit-map represents gray scale, then the values between the minimum and maximum sample values should be interpreted according to either the gray scale response curve information (if included) or according to the result of some more arbitrary rule.

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, MinSampleValue represents minimum intensity, and MaxSampleValue represents maximum intensity.  For PlanarConfiguration = 1, the samples are stored in the indicated order within a pixel: first Red, then Green, then Blue.  For PlanarConfiguration = 2, the sample planes are stored in the indicated order: first the Red sample plane, then the Green plane, then the Blue plane.

The Red, Green and Blue intensity values are defined according to the NTSC specifications for primary color chromaticity.  These specifications assume the illumination to be CIE D6500.  See the Red, Green and Blue color response curve tags.

Note: some compression schemes, such as the CCITT schemes, imply a particular PhotometricInterpretation.  Therefore, when reading such data, TIFF readers should ignore PhotometricInterpretation.  And, ideally, TIFF writers should not write out the field when using one of these schemes.

No default.

GrayResponseUnit

Tag  = 290 (122)

Type = SHORT

N    = 1

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.

Default is            2.

GrayResponseCurve

Tag  = 291 (123)

Type = SHORT

N    = 2**BitsPerSample

The purpose of the gray response curve and the gray units is to further provide

photometric interpretation information for gray scale image data.  The gray response curve specifies for given levels of gray between the minimum and maximum sample values the actual photometric gray level of the value.  It represents this gray level in terms of optical density.

The GrayScaleResponseUnits specifies the accuracy of the information contained in the curve.  Since optical density is specified in terms of fractional numbers, this tag is necessary to know how to interpret the stored integer information.  For example, if GrayScaleResponseUnits is set to 4 (ten-thousandths of a unit), and a GrayScaleResponseCurve number for gray level 4 is 3455, then the resulting actual value is 0.3455.

If the gray scale response curve is known for the data in the TIFF file, and if the gray scale response of the output device is known, then an intelligent conversion can be made between the input data and the output device.  For example, the output can be made to look just like the input.  In addition, if the input image lacks contrast (as can be seen from the response curve), then appropriate contrast enhancements can be made.

The purpose of the grey scale response curve is to act as a lookup table mapping values from 0 to 2**BitsPerSample-1 into specific intensity values. Refer to the PhotometricInterpretation tag to determine how the mapping should be done.

ColorResponseUnit

Tag  = 300 (12C)

Type = SHORT

N    = 1

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.

Default is            2.

ColorResponseCurves

Tag  = 301 (12D)

Type = SHORT

N    = 2**BitsPerSample (for Red samples) +

2**BitsPerSample (for Green samples) +

2**BitsPerSample (for Blue samples)

This tag defines three color response curves (one each for Red, Green and Blue color information).  The curves are stored sequentially (in red-green-blue order).  The size of each table is 2**BitsPerSample, using the BitsPerSample value corresponding to the respective color.  The ColorResponseUnit further specifies how each entry in the table is to be interpreted.

The purpose of the color response curves is to act as a lookup table mapping values from 0 to 2**BitsPerSample-1 into specific intensity values.  The intensity values are as specified by the NTSC color strandard assuming illumination to be CIE D6500.

Correspondence to the Physical World

XResolution

Tag  = 282  (11A)

Type = RATIONAL

N    = 1

The number of pixels per ResolutionUnit (see below) in the X direction, i.e.,

in the ImageWidth direction.  It is, of course, not mandatory that the image be actually printed at the size implied by this parameter.  It is up to the application to use this information as it wishes.

As is the case for many of these fields, XResolution may be invalid and irrelevant for some images (e.g., images made with a hand-held digitizing camera, which has a three-dimensional nature) and should therefore be absent from the image file.

No default.

YResolution

Tag  = 283  (11B)

Type = RATIONAL

N    = 1

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

ImageLength direction.

No default.

ResolutionUnit

Tag  = 296 (128)

Type = SHORT

N    = 1

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. 2 = inch

3 = centimeter

Default is 2

Orientation

Tag  = 274 (112)

Type = SHORT

N    = 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.

Default is 1.

Document Context

DocumentName

Tag  = 269  (10D)

Type = ASCII

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

No default.

PageName

Tag  = 285  (11D)

Type = ASCII

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

No default.

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 inches.

No default.

YPosition

Tag  = 287  (11F)

Type = RATIONAL

The Y offset of the top of the image, with respect to the top of the page, in

inches.  In the TIFF coordinate scheme, the positive Y direction is down, so

that YPosition is always positive.

No default.

PageNumber

Tag  = 297  (129)

Type = SHORT

N    = 2

This tag is used to specify page numbers of a multiple page (e.g. facsimile)

document.  Two SHORT 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.

Miscellaneous Strings

ImageDescription

Tag  = 270 (10E)

Type = ASCII

Useful or interesting information about the image.

No default.

Make

Tag  = 271  (10F)

Type = ASCII

The name of the scanner manufacturer.

No default.

Model

Tag  = 272  (110)

Type = ASCII

The model name/number of the scanner.

No default.

Storage Management

These fields may be useful in certain dynamic editing situations.  Software that merely reads TIFF files will probably not need to care about these fields. And, of course, software that creates TIFF files is by no means required to write these fields.

FreeOffsets

Tag  = 288  (120)

Type = LONG

For each free block in the file, its byte offset.

No default.

FreeByteCounts

Tag  = 289  (121)

Type = LONG

For each free block in the file, the number of bytes in the block.

6) Examples

A binary image from a paint program might contain only SubfileType, ImageWidth, ImageLength, StripOffsets, and PhotometricInterpretation fields.

A typical line art scan might require that XResolution and YResolution be added to the above list.

7) Private Fields

An organization may wish to store with the image file information that is meaningful only to that organization.  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, to avoid possible conflicts with other organizations.

Private enumerated values can be accommodated in a similar fashion.

Enumeration constants numbered 32768 or higher are reserved for private usage. Upon request, the administrator will allocate and register a block of enumerated values for a particular field, to avoid possible conflicts.

Tags and values which are allocated in the private number range are not prohibited from being included in a future revision of this specification. Several such instances can be found in this revision.

8) A List of Possible Future Enhancements

In the future TIFF will very likely be expanded to support more compression schemes, more photometric schemes, color lookup tables, and non-rectangular images.  Please refer all questions regarding enhancements to TIFF to the contacts listed at the beginning of the document.  Written submissions should be in Microsoft Windows Write format, to ensure timely and error-free incorporation into the specification.

Tag Image File Format  Rev 4.0

April 31, 1987

Appendix A: Tag Structure Rationale

A file format is defined by both form (structure) and content.  The content of TIFF consists of definitions of individual fields.  It is therefore the content that we are ultimately interested in.  The structure merely tells us how to find the fields.

Yet the structure deserves serious consideration for a number of reasons that

are not at all obvious at first glance.  Since the structure described herein

departs significantly from several other approaches, it may be useful to

discuss the rationale behind it.

The simplest, most straightforward structure for something like an image file is a positional format.  In a positional scheme, the location of the data defines what the data means.  For example, the field for number of rows might begin at byte offset 30 in the image file.

This approach is simple and easy to implement and is perfect for static environments.  But if a significant amount of ongoing change must be accommodated, some subtle problems start showing up.  For example, suppose that a field must be superseded by a new, more general field.  You could bump a version number to flag the change.  Then new software has no problem doing something sensible with old data, and all old software will reject the new data, even software that didnt care about the old field.  This may seem like no more than a minor annoyance at first glance, but causing old software to break more often than it would really need to can be very costly and, inevitably, causes much gnashing of teeth among customers.

Furthermore, it can be avoided.  One approach is to store a valid flag bit for each field.  Now you dont have to bump the version number, as long as you can put the new field somewhere that doesnt disturb any of the old fields. Old software that didnt care about that old field anyway can continue to function.  (Old software that did care will of course have to give up, but this is an unavoidable price to be paid for the sake of progress, barring total omniscience.)

Another problem that crops up frequently is that certain fields are likely to make sense only if other fields have certain values.  This is not such a serious problem in practice; it just makes things more confusing. Nevertheless, we note that the valid flag bits described in the previous paragraph can help to clarify the situation.

Field-dumping programs can be very helpful for diagnostic purposes.  A desirable characteristic of such a program is that it doesnt have to know much about what it is dumping.  In particular, it would be nice if the program could dump ASCII data in ASCII format, integer data in integer format, and so on, without having to teach the program about new fields all the time.  So maybe we should add a data type component to our fields, plus information on how long the field is, so that our dump program can walk through the fields without knowing what the fields mean.

But note that if we add one more component to each field, namely a tag that tells what the field means, we can dispense with the valid flag bits, and we can also avoid wasting space on the non-valid fields in the file.  Simple image creation applications can write out several fields and be done.

We have now derived the essentials of a tag based image file format.

Finally, a caveat.  A tag based scheme cannot guarantee painless growth.  But is does provide a useful tool to assist in the process.

Table 1/T.4

Make-up codes

Terminating codes

White run                           Code word                       Black run                          Code word

length                                                                                                                       length

0                              00110101                                   0                                 0000110111

1                              000111                                       1                                 010

2                              0111                                           2                                 11

3                              1000                                           3                                 10

4                              1011                                           4                                 011

5                              1100                                           5                                 0011

6                              1110                                           6                                 0010

7                              1111                                           7                                 00011

8                              10011                                         8                                 000101

9                              10100                                         9                                 000100

10                               00111                                      10                                 0000100

11                               01000                                      11                                 0000101

12                               001000                                    12                                 0000111

13                               000011                                    13                                 00000100

14                               110100                                    14                                 00000111

15                               110101                                    15                                 000011000

16                               101010                                    16                                 0000010111

17                               101011                                    17                                 0000011000

18                               0100111                                  18                                 0000001000

19                               0001100                                  19                                 00001100111

20                               0001000                                  20                                 00001101000

21                               0010111                                  21                                 00001101100

22                               0000011                                  22                                 00000110111

23                               0000100                                  23                                 00000101000

24                               0101000                                  24                                 00000010111

25                               0101011                                  25                                 00000011000

26                               0010011                                  26                                 000011001010

27                               0100100                                  27                                 000011001011

28                               0011000                                  28                                 000011001100

29                               00000010                                29                                 000011001101

30                               00000011                                30                                 000001101000

31                               00011010                                31                                 000001101001

32                               00011011                                32                                 000001101010

33                               00010010                                33                                 000001101011

34                               00010011                                34                                 000011010010

35                               00010100                                35                                 000011010011

36                               00010101                                36                                 000011010100

37                               00010110                                37                                 000011010101

38                               00010111                                38                                 000011010110

39                               00101000                                39                                 000011010111

40                               00101001                                40                                 000001101100

41                               00101010                                41                                 000001101101

42                               00101011                                42                                 000011011010

43                               00101100                                43                                 000011011011

44                               00101101                                44                                 000001010100

45                               00000100                                45                                 000001010101

46                               00000101                                46                                 000001010110

47                               00001010                                47                                 000001010111

48                               00001011                                48                                 000001100100

49                               01010010                                49                                 000001100101

50                               01010011                                50                                 000001010010

51                               01010100                                51                                 000001010011

52                               01010101                                52                                 000000100100

53                               00100100                                53                                 000000110111

54                               00100101                                54                                 000000111000

55                               01011000                                55                                 000000100111

56                               01011001                                56                                 000000101000

57                               01011010                                57                                 000001011000

58                               01011011                                58                                 000001011001

59                               01001010                                59                                 000000101011

60                               01001011                                60                                 000000101100

61                               00110010                                61                                 000001011010

62                               00110011                                62                                 000001100110

63                               00110100                                63                                 000001100111

Table 2/T.4

Make-up codes

White run                           Code word                       Black run                          Code word

length                                                                                                                       length

64                               11011                                      64                                 0000001111

128                               10010                                   128                                  000011001000

192                               010111                                 192                                  000011001001

256                               0110111                               256                                  000001011011

320                               00110110                             320                                  000000110011

384                               00110111                             384                                  000000110100

448                               01100100                             448                                  000000110101

512                               01100101                             512                                  0000001101100

576                               01101000                             576                                  0000001101101

640                               01100111                             640                                  0000001001010

704                               011001100                           704                                  0000001001011

768                               011001101                           768                                  0000001001100

832                               011010010                           832                                  0000001001101

896                               011010011                           896                                  0000001110010

960                               011010100                           960                                  0000001110011

1024                                011010101                           1024                                0000001110100

1088                                011010110                           1088                                0000001110101

1152                                011010111                           1152                                0000001110110

1216                                011011000                           1216                                0000001110111

1280                                011011001                           1280                                0000001010010

1344                                011011010                           1344                                0000001010011

1408                                011011011                           1408                                0000001010100

1472                                010011000                           1472                                0000001010101

1536                                010011001                           1536                                0000001011010

1600                                010011010                           1600                                0000001011011

1664                                011000                                 1664                                0000001100100

1728                                010011011                           1728                                0000001100101

EOL                                000000000001                     EOL                                000000000001

Note it is recognized that machines exist which accommodate larger paper widths whilst maintaining the standard horizontal resolution. This option

has been provided for by the addition of the Make-up code set defined as follows:

Run length                                            Make-up codes

(black and white)

1792                                                   00000001000

1856                                                   00000001100

1920                                                   00000001101

1984                                                   000000010010

2048                                                   000000010011

2112                                                   000000010100

2176                                                   000000010101

2240                                                   000000010110

2304                                                   000000010111

2368                                                   000000011100

2432                                                   000000011101

2496                                                   000000011110

2560                                                   000000011111

Appendix B: Data Compression Scheme 2

Abstract

This document describes a method for compressing bilevel data that is based on the CCITT Group 3 1D facsimile compression scheme.  It is intended that it be used in conjunction with the Tag Image File Format.

References

1.  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.

2.  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.

Relationship to the CCITT Specifications

The CCITT Group 3 and Group 4 specifications describe communications protocols for a particular class of devices.  They are not by themselves sufficient to describe a disk data format.  Fortunately, however, the CCITT coding schemes can be readily adapted to this different environment.  The following is one such adaptation.

Coding Scheme

A line (row) of data is composed of a series of variable length code words. Each code word represents a run length of either all white or all black. (Actually, more than one code word may be required to code a given run, in a manner described below.)  White runs and black runs alternate.

In order to ensure that the receiver (decompressor) maintains color synchronization, all data lines will begin with a white run length code word set.  If the actual scan line begins with a black run, a white run length of zero will be sent (written).  Black or white run lengths are defined by the code words in Tables 1 and 2.  The code words are of two types: Terminating code words and Make-up code words.  Each run length is represented by zero or more Make-up code words followed by exactly one Terminating code word.

Run lengths in the range of 0 to 63 pels (pixels) are encoded with their appropriate Terminating code word.  Note that there is a different list of code words for black and white run lengths.

Run lengths in the range of 64 to 2623 (2560+63) pels are encoded first by

the Make-up code word representing the run length that is nearest to, not

longer than, that required.  This is then followed by the Terminating code

word representing the difference between the required run length and the run

length represented by the Make-up code.

Run lengths in the range of lengths longer than or equal to 2624 pels are coded first by the Make-up code of 2560.  If the remaining part of the run (after the first Make-up code of 2560) is 2560 pels or greater, additional Make-up code(s) of 2560 are issued until the remaining part of the run becomes less than 2560 pels.  Then the remaining part of the run is encoded by Terminating code or by Make-up code plus Terminating code, according to the range mentioned above.

It is considered an unrecoverable error if the sum of the run lengths for a line do not equal the value of the ImageWidth field.

New rows always begin on the next available byte boundary.

No EOL code words are used.  No fill bits are used, except for the ignored bits at the end of the last byte of a row.  RTC is not used.

Appendix C: Data Compression Scheme 32773 PackBits

Abstract

This document describes a compression scheme for paint type files.  It is intended for use in conjunction with the Tag Image File Format.

1) Motivation

The current TIFF specification allows for two compression schemes.

Compression type 1 is really no compression, other than basic pixel packing. Compression type 2, based on CCITT 1D compression, is powerful, but not trivial to implement and is designed for scanned data more than data generated by paint programs.  Simple byte-oriented run length schemes tend to work well with paint data, since paint data often has large areas of white space and areas filled with 8-bit patterns.

2) Description

Since several good schemes already exist, we may as well use one of them.  We somewhat arbitrarily pick the Macintosh PackBits scheme.  It is byte oriented, so there is no problem with word alignment.  And it has a good worst case behavior (at most 1 extra byte for every 128 input bytes).  For Macintosh users, there are toolbox utilities PackBits and UnPackBits that will do the work for you, but it is easy to implement your own.

A pseudo code fragment to unpack it might look like this:

Loop until you get the number of unpacked bytes you are expecting:

Read the next source byte into n.

If n is between 0 and 127 inclusive, copy the next n+1 bytes literally. Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times. Else if n is 128, noop.

Endloop

In the inverse routine, its best to encode a 2 byte repeat run as a replicate run except when preceded and followed by a literal run, in which case its best to merge the three into one literal run.  Always encode 3 byte repeats as replicate runs.

So thats the algorithm.  Other rules:

Each row must be packed separately.  Do not compress across row boundaries.

The number of uncompressed bytes per row is defined to be (ImageWidth + 7) /

8.  If the uncompressed bitmap is required to have an even number of bytes per row, decompress into word-aligned buffers.

If a run is larger than 128 bytes, simply encode the remainder of the run as one or more additional replicate runs.

When PackBits data is uncompressed, the result should be interpreted as per compression type 1 (no compression); i.e. the SamplesPerPixel, BitsPerSample and PlanarConfiguration tags should be consulted to interpret the image.

Appendix D: Using the Microsoft Windows Clipboard

The Microsoft Windows Clipboard provides a mechanism that allows applications

to pass information to each other.  Pictures created in Microsoft Paint, for example, may be passed as bitmaps to Microsoft Write.

In general, the Clipboard is not recommended as a way of passing TIFF information between applications.  The amount of data associate with image data can be very large.  Currently, data passed through the Microsoft Windows Clipboard is limited to 64K bytes.  It is suggested that applications employ file-based mechanisms to exchange TIFF data.  Aldus PageMaker, for example, implements a File Place command to allow TIFF files to be imported.

For images requiring less than 64K bytes of TIFF data, a new Clipboard format has been defined:

CF_TIFF                                     Microsoft Tag Image File Format

(this symbol will be defined in the windows.h file distributed with the Microsoft Windows Software Development Kit.)

The data associated with this format is a handle to a block of global memory containing the same data as would be stored in a disk TIFF file.  When interpreting this memory, TIFF readers should interpret file offsets as offsets from the beginning of the memory block.

Applications that are capable of passing TIFF information through the

Microsoft Windows Clipboard should preferably not render the TIFF information until requested to do so.  In addition to passingTIFF data, these applications should also place bitmaps (Clipboard format CF_BITMAP) on the Clipboard corresponding to the TIFF data.  Applications should judge whether to render these bitmaps formatted for the display or for the currently selected output device.  Placing a bitmap on the Clipboard will allow the Clipboard viewer application (CLIPBRD.EXE) to display a likeness of the image and will allow non-TIFF applications to import, at least, an approximate bitmap.  These and other Clipboard techniques are described in the Microsoft Windows Programming Guide, a document in the Microsoft Windows Software Development Kit.

Appendix E: Numerical List of TIFF Tags

SubfileType

Tag     = 255  (FF)

Type    = SHORT

N       = 1

ImageWidth

Tag     = 256  (100)

Type    = SHORT

N       = 1

ImageLength

Tag     = 257  (101)

Type    = SHORT

N       = 1

BitsPerSample

Tag     = 258  (102)

Type    = SHORT

N       = SamplesPerPixel

Compression

Tag     = 259  (103)

Type    = SHORT

N       = SamplesPerPixel for PlanarConfiguration equal to 1 or 2.

PhotometricInterpretation

Tag     = 262  (106)

Type    = SHORT

N       = 1

Threshholding

Tag     =               263  (107)

Type    =             SHORT

N       =                 1

CellWidth

Tag     = 264  (108)

Type    = SHORT

N       = 1

CellLength

Tag     =               265  (109)

Type    =             SHORT

N       =                 1

FillOrder

Tag     = 266  (10A)

Type    = SHORT

N       = 1

DocumentName

Tag     = 269  (10D)

Type    = ASCII

ImageDescription

Tag     = 270 (10E)

Type    = ASCII

Make

Tag              = 271  (10F)

Type    = ASCII

Model

Tag     = 272  (110)

Type    = ASCII

StripOffsets

Tag     = 273  (111)

Type    = SHORT or LONG

N                  = StripsPerImage for PlanarConfiguration equal to 1.

= SamplesPerPixel * StripsPerImage for PlanarConfiguration equal to 2

Orientation

Tag              = 274 (112)

Type    = SHORT

N                                        = 1

SamplesPerPixel

Tag     = 277  (115)

Type    = SHORT

N       = 1

RowsPerStrip

Tag     = 278  (116)

Type    = SHORT or LONG

N       = 1

StripByteCounts

Tag              = 279  (117)

Type    = LONG

N                  = StripsPerImage for PlanarConfiguration equal to 1.

= SamplesPerPixel * StripsPerImage for PlanarConfiguration equal to 2

MinSampleValue

Tag     = 280  (118)

Type    = SHORT

N       = SamplesPerPixel

MaxSampleValue

Tag     = 281  (119)

Type    = SHORT

N       = SamplesPerPixel

XResolution

Tag     = 282  (11A)

Type    = RATIONAL

N       = 1

YResolution

Tag     = 283  (11B)

Type    = RATIONAL

N       = 1

PlanarConfiguration

Tag     =               284  (11C)

Type    =             SHORT

N       =                 1

PageName

Tag              = 285  (11D)

Type    = ASCII

XPosition

Tag              = 286  (11E)

Type    = RATIONAL

YPosition

Tag     = 287  (11F)

Type    = RATIONAL

FreeOffsets

Tag     = 288  (120)

Type    = LONG

FreeByteCounts

Tag     = 289  (121)

Type    = LONG

GrayResponseUnit

Tag     = 290 (122)

Type    = SHORT

N       = 1

GrayResponseCurve

Tag     = 291 (123)

Type    = SHORT

N       = 2**BitsPerSample

Group3Options

Tag     = 292  (124)

Type    = LONG

N       = 1

Group4Options

Tag     =  293  (125)

Type    = LONG

N       = 1

ResolutionUnit

Tag     = 296 (128)

Type    = SHORT

N       = 1

PageNumber

Tag     = 297  (129)

Type    = SHORT

N       = 2

ColorResponseUnit

Tag     = 300 (12C)

Type    = SHORT

N       = 1

ColorResponseCurves

Tag     = 301 (12D)

Type    = SHORT

N                  = 2**BitsPerSample (for Red sample)+

2**BitsPerSample (for Green sample)+

2**BitsPerSample(for Blue sample)

 
 
     

Изготовление и модернизация фонтанов. Аренда и прокат фонтанов. Дарите радость людям! Покупайте наши изделия!

поднятся наверх страницы о диммерах

На Главную
Новости
Наверх страницы

поднятся наверх страницы о диммерах      

Светомузыкальные фонтаны, Поющие фонтаны, прокат фонтанов, аренда фонтанов, Динамические фонтаны,

хочу купить
фонтан

Светомузыкальные фонтаны, Поющие фонтаны, прокат фонтанов, аренда фонтанов, Динамические фонтаны,

Контакты

Светомузыкальные фонтаны, Поющие фонтаны, прокат фонтанов, аренда фонтанов, Динамические фонтаны, musidora@rambler.ru

Последнее обновление 09.08.2009

Инженер и веб-мастер Богданов Андрей Александрович Water LAB ©