consts.go raw

   1  // Copyright 2011 The Go Authors. All rights reserved.
   2  // Use of this source code is governed by a BSD-style
   3  // license that can be found in the LICENSE file.
   4  
   5  package tiff
   6  
   7  // A tiff image file contains one or more images. The metadata
   8  // of each image is contained in an Image File Directory (IFD),
   9  // which contains entries of 12 bytes each and is described
  10  // on page 14-16 of the specification. An IFD entry consists of
  11  //
  12  //  - a tag, which describes the signification of the entry,
  13  //  - the data type and length of the entry,
  14  //  - the data itself or a pointer to it if it is more than 4 bytes.
  15  //
  16  // The presence of a length means that each IFD is effectively an array.
  17  
  18  const (
  19  	leHeader = "II\x2A\x00" // Header for little-endian files.
  20  	beHeader = "MM\x00\x2A" // Header for big-endian files.
  21  
  22  	ifdLen = 12 // Length of an IFD entry in bytes.
  23  )
  24  
  25  // Data types (p. 14-16 of the spec).
  26  const (
  27  	dtByte     = 1
  28  	dtASCII    = 2
  29  	dtShort    = 3
  30  	dtLong     = 4
  31  	dtRational = 5
  32  )
  33  
  34  // The length of one instance of each data type in bytes.
  35  var lengths = [...]uint32{0, 1, 1, 2, 4, 8}
  36  
  37  // Tags (see p. 28-41 of the spec).
  38  const (
  39  	tImageWidth                = 256
  40  	tImageLength               = 257
  41  	tBitsPerSample             = 258
  42  	tCompression               = 259
  43  	tPhotometricInterpretation = 262
  44  
  45  	tFillOrder = 266
  46  
  47  	tStripOffsets    = 273
  48  	tSamplesPerPixel = 277
  49  	tRowsPerStrip    = 278
  50  	tStripByteCounts = 279
  51  
  52  	tT4Options = 292 // CCITT Group 3 options, a set of 32 flag bits.
  53  	tT6Options = 293 // CCITT Group 4 options, a set of 32 flag bits.
  54  
  55  	tTileWidth      = 322
  56  	tTileLength     = 323
  57  	tTileOffsets    = 324
  58  	tTileByteCounts = 325
  59  
  60  	tXResolution    = 282
  61  	tYResolution    = 283
  62  	tResolutionUnit = 296
  63  
  64  	tPredictor    = 317
  65  	tColorMap     = 320
  66  	tExtraSamples = 338
  67  	tSampleFormat = 339
  68  )
  69  
  70  // Compression types (defined in various places in the spec and supplements).
  71  const (
  72  	cNone       = 1
  73  	cCCITT      = 2
  74  	cG3         = 3 // Group 3 Fax.
  75  	cG4         = 4 // Group 4 Fax.
  76  	cLZW        = 5
  77  	cJPEGOld    = 6 // Superseded by cJPEG.
  78  	cJPEG       = 7
  79  	cDeflate    = 8 // zlib compression.
  80  	cPackBits   = 32773
  81  	cDeflateOld = 32946 // Superseded by cDeflate.
  82  )
  83  
  84  // Photometric interpretation values (see p. 37 of the spec).
  85  const (
  86  	pWhiteIsZero = 0
  87  	pBlackIsZero = 1
  88  	pRGB         = 2
  89  	pPaletted    = 3
  90  	pTransMask   = 4 // transparency mask
  91  	pCMYK        = 5
  92  	pYCbCr       = 6
  93  	pCIELab      = 8
  94  )
  95  
  96  // Values for the tPredictor tag (page 64-65 of the spec).
  97  const (
  98  	prNone       = 1
  99  	prHorizontal = 2
 100  )
 101  
 102  // Values for the tResolutionUnit tag (page 18).
 103  const (
 104  	resNone    = 1
 105  	resPerInch = 2 // Dots per inch.
 106  	resPerCM   = 3 // Dots per centimeter.
 107  )
 108  
 109  // imageMode represents the mode of the image.
 110  type imageMode int
 111  
 112  const (
 113  	mBilevel imageMode = iota
 114  	mPaletted
 115  	mGray
 116  	mGrayInvert
 117  	mRGB
 118  	mRGBA
 119  	mNRGBA
 120  	mCMYK
 121  )
 122  
 123  // CompressionType describes the type of compression used in Options.
 124  type CompressionType int
 125  
 126  // Constants for supported compression types.
 127  const (
 128  	Uncompressed CompressionType = iota
 129  	Deflate
 130  	LZW
 131  	CCITTGroup3
 132  	CCITTGroup4
 133  )
 134  
 135  // specValue returns the compression type constant from the TIFF spec that
 136  // is equivalent to c.
 137  func (c CompressionType) specValue() uint32 {
 138  	switch c {
 139  	case LZW:
 140  		return cLZW
 141  	case Deflate:
 142  		return cDeflate
 143  	case CCITTGroup3:
 144  		return cG3
 145  	case CCITTGroup4:
 146  		return cG4
 147  	}
 148  	return cNone
 149  }
 150