mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-04 06:02:26 -06:00 
			
		
		
		
	
		
			
	
	
		
			150 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			150 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								// Copyright 2011 The Go Authors. All rights reserved.
							 | 
						||
| 
								 | 
							
								// Use of this source code is governed by a BSD-style
							 | 
						||
| 
								 | 
							
								// license that can be found in the LICENSE file.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								package tiff
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// A tiff image file contains one or more images. The metadata
							 | 
						||
| 
								 | 
							
								// of each image is contained in an Image File Directory (IFD),
							 | 
						||
| 
								 | 
							
								// which contains entries of 12 bytes each and is described
							 | 
						||
| 
								 | 
							
								// on page 14-16 of the specification. An IFD entry consists of
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  - a tag, which describes the signification of the entry,
							 | 
						||
| 
								 | 
							
								//  - the data type and length of the entry,
							 | 
						||
| 
								 | 
							
								//  - the data itself or a pointer to it if it is more than 4 bytes.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// The presence of a length means that each IFD is effectively an array.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const (
							 | 
						||
| 
								 | 
							
									leHeader = "II\x2A\x00" // Header for little-endian files.
							 | 
						||
| 
								 | 
							
									beHeader = "MM\x00\x2A" // Header for big-endian files.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									ifdLen = 12 // Length of an IFD entry in bytes.
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Data types (p. 14-16 of the spec).
							 | 
						||
| 
								 | 
							
								const (
							 | 
						||
| 
								 | 
							
									dtByte     = 1
							 | 
						||
| 
								 | 
							
									dtASCII    = 2
							 | 
						||
| 
								 | 
							
									dtShort    = 3
							 | 
						||
| 
								 | 
							
									dtLong     = 4
							 | 
						||
| 
								 | 
							
									dtRational = 5
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// The length of one instance of each data type in bytes.
							 | 
						||
| 
								 | 
							
								var lengths = [...]uint32{0, 1, 1, 2, 4, 8}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Tags (see p. 28-41 of the spec).
							 | 
						||
| 
								 | 
							
								const (
							 | 
						||
| 
								 | 
							
									tImageWidth                = 256
							 | 
						||
| 
								 | 
							
									tImageLength               = 257
							 | 
						||
| 
								 | 
							
									tBitsPerSample             = 258
							 | 
						||
| 
								 | 
							
									tCompression               = 259
							 | 
						||
| 
								 | 
							
									tPhotometricInterpretation = 262
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									tFillOrder = 266
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									tStripOffsets    = 273
							 | 
						||
| 
								 | 
							
									tSamplesPerPixel = 277
							 | 
						||
| 
								 | 
							
									tRowsPerStrip    = 278
							 | 
						||
| 
								 | 
							
									tStripByteCounts = 279
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									tT4Options = 292 // CCITT Group 3 options, a set of 32 flag bits.
							 | 
						||
| 
								 | 
							
									tT6Options = 293 // CCITT Group 4 options, a set of 32 flag bits.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									tTileWidth      = 322
							 | 
						||
| 
								 | 
							
									tTileLength     = 323
							 | 
						||
| 
								 | 
							
									tTileOffsets    = 324
							 | 
						||
| 
								 | 
							
									tTileByteCounts = 325
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									tXResolution    = 282
							 | 
						||
| 
								 | 
							
									tYResolution    = 283
							 | 
						||
| 
								 | 
							
									tResolutionUnit = 296
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									tPredictor    = 317
							 | 
						||
| 
								 | 
							
									tColorMap     = 320
							 | 
						||
| 
								 | 
							
									tExtraSamples = 338
							 | 
						||
| 
								 | 
							
									tSampleFormat = 339
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Compression types (defined in various places in the spec and supplements).
							 | 
						||
| 
								 | 
							
								const (
							 | 
						||
| 
								 | 
							
									cNone       = 1
							 | 
						||
| 
								 | 
							
									cCCITT      = 2
							 | 
						||
| 
								 | 
							
									cG3         = 3 // Group 3 Fax.
							 | 
						||
| 
								 | 
							
									cG4         = 4 // Group 4 Fax.
							 | 
						||
| 
								 | 
							
									cLZW        = 5
							 | 
						||
| 
								 | 
							
									cJPEGOld    = 6 // Superseded by cJPEG.
							 | 
						||
| 
								 | 
							
									cJPEG       = 7
							 | 
						||
| 
								 | 
							
									cDeflate    = 8 // zlib compression.
							 | 
						||
| 
								 | 
							
									cPackBits   = 32773
							 | 
						||
| 
								 | 
							
									cDeflateOld = 32946 // Superseded by cDeflate.
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Photometric interpretation values (see p. 37 of the spec).
							 | 
						||
| 
								 | 
							
								const (
							 | 
						||
| 
								 | 
							
									pWhiteIsZero = 0
							 | 
						||
| 
								 | 
							
									pBlackIsZero = 1
							 | 
						||
| 
								 | 
							
									pRGB         = 2
							 | 
						||
| 
								 | 
							
									pPaletted    = 3
							 | 
						||
| 
								 | 
							
									pTransMask   = 4 // transparency mask
							 | 
						||
| 
								 | 
							
									pCMYK        = 5
							 | 
						||
| 
								 | 
							
									pYCbCr       = 6
							 | 
						||
| 
								 | 
							
									pCIELab      = 8
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Values for the tPredictor tag (page 64-65 of the spec).
							 | 
						||
| 
								 | 
							
								const (
							 | 
						||
| 
								 | 
							
									prNone       = 1
							 | 
						||
| 
								 | 
							
									prHorizontal = 2
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Values for the tResolutionUnit tag (page 18).
							 | 
						||
| 
								 | 
							
								const (
							 | 
						||
| 
								 | 
							
									resNone    = 1
							 | 
						||
| 
								 | 
							
									resPerInch = 2 // Dots per inch.
							 | 
						||
| 
								 | 
							
									resPerCM   = 3 // Dots per centimeter.
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// imageMode represents the mode of the image.
							 | 
						||
| 
								 | 
							
								type imageMode int
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const (
							 | 
						||
| 
								 | 
							
									mBilevel imageMode = iota
							 | 
						||
| 
								 | 
							
									mPaletted
							 | 
						||
| 
								 | 
							
									mGray
							 | 
						||
| 
								 | 
							
									mGrayInvert
							 | 
						||
| 
								 | 
							
									mRGB
							 | 
						||
| 
								 | 
							
									mRGBA
							 | 
						||
| 
								 | 
							
									mNRGBA
							 | 
						||
| 
								 | 
							
									mCMYK
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// CompressionType describes the type of compression used in Options.
							 | 
						||
| 
								 | 
							
								type CompressionType int
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Constants for supported compression types.
							 | 
						||
| 
								 | 
							
								const (
							 | 
						||
| 
								 | 
							
									Uncompressed CompressionType = iota
							 | 
						||
| 
								 | 
							
									Deflate
							 | 
						||
| 
								 | 
							
									LZW
							 | 
						||
| 
								 | 
							
									CCITTGroup3
							 | 
						||
| 
								 | 
							
									CCITTGroup4
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// specValue returns the compression type constant from the TIFF spec that
							 | 
						||
| 
								 | 
							
								// is equivalent to c.
							 | 
						||
| 
								 | 
							
								func (c CompressionType) specValue() uint32 {
							 | 
						||
| 
								 | 
							
									switch c {
							 | 
						||
| 
								 | 
							
									case LZW:
							 | 
						||
| 
								 | 
							
										return cLZW
							 | 
						||
| 
								 | 
							
									case Deflate:
							 | 
						||
| 
								 | 
							
										return cDeflate
							 | 
						||
| 
								 | 
							
									case CCITTGroup3:
							 | 
						||
| 
								 | 
							
										return cG3
							 | 
						||
| 
								 | 
							
									case CCITTGroup4:
							 | 
						||
| 
								 | 
							
										return cG4
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return cNone
							 | 
						||
| 
								 | 
							
								}
							 |