// Copyright 2014 <chaishushan{AT}gmail.com>. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Auto generated by gen_helper.go, DO NOT EDIT!!!

package tiff

import (
	"fmt"
	"time"
)

var _TiffTypeTable = map[TiffType]string{
	TiffType_ClassicTIFF: `TiffType_ClassicTIFF`,
	TiffType_BigTIFF:     `TiffType_BigTIFF`,
}

func (p TiffType) String() string {
	if name, ok := _TiffTypeTable[p]; ok {
		return name
	}
	return fmt.Sprintf("TiffType_Unknown(%d)", uint16(p))
}

var _ImageTypeTable = map[ImageType]string{
	ImageType_Nil:           `ImageType_Nil`,
	ImageType_Bilevel:       `ImageType_Bilevel`,
	ImageType_BilevelInvert: `ImageType_BilevelInvert`,
	ImageType_Paletted:      `ImageType_Paletted`,
	ImageType_Gray:          `ImageType_Gray`,
	ImageType_GrayInvert:    `ImageType_GrayInvert`,
	ImageType_RGB:           `ImageType_RGB`,
	ImageType_RGBA:          `ImageType_RGBA`,
	ImageType_NRGBA:         `ImageType_NRGBA`,
}

func (p ImageType) String() string {
	if name, ok := _ImageTypeTable[p]; ok {
		return name
	}
	return fmt.Sprintf("ImageType_Unknown(%d)", uint16(p))
}

var _DataTypeTable = map[DataType]string{
	DataType_Nil:       `DataType_Nil`,       // placeholder, invalid
	DataType_Byte:      `DataType_Byte`,      // 8-bit unsigned integer
	DataType_ASCII:     `DataType_ASCII`,     // 8-bit bytes w/ last byte null
	DataType_Short:     `DataType_Short`,     // 16-bit unsigned integer
	DataType_Long:      `DataType_Long`,      // 32-bit unsigned integer
	DataType_Rational:  `DataType_Rational`,  // 64-bit unsigned fraction
	DataType_SByte:     `DataType_SByte`,     // !8-bit signed integer
	DataType_Undefined: `DataType_Undefined`, // !8-bit untyped data
	DataType_SShort:    `DataType_SShort`,    // !16-bit signed integer
	DataType_SLong:     `DataType_SLong`,     // !32-bit signed integer
	DataType_SRational: `DataType_SRational`, // !64-bit signed fraction
	DataType_Float:     `DataType_Float`,     // !32-bit IEEE floating point
	DataType_Double:    `DataType_Double`,    // !64-bit IEEE floating point
	DataType_IFD:       `DataType_IFD`,       // %32-bit unsigned integer (offset)
	DataType_Long8:     `DataType_Long8`,     // BigTIFF 64-bit unsigned integer
	DataType_SLong8:    `DataType_SLong8`,    // BigTIFF 64-bit signed integer
	DataType_IFD8:      `DataType_IFD8`,      // BigTIFF 64-bit unsigned integer (offset)
}

func (p DataType) String() string {
	if name, ok := _DataTypeTable[p]; ok {
		return name
	}
	return fmt.Sprintf("DataType_Unknown(%d)", uint16(p))
}

var _TagTypeTable = map[TagType]string{
	TagType_NewSubfileType:               `TagType_NewSubfileType`,               // LONG , 1, # Default=0. subfile data descriptor
	TagType_SubfileType:                  `TagType_SubfileType`,                  // SHORT, 1, # kind of data in subfile
	TagType_ImageWidth:                   `TagType_ImageWidth`,                   // SHORT/LONG/LONG8, 1, # Required
	TagType_ImageLength:                  `TagType_ImageLength`,                  // SHORT/LONG/LONG8, 1, # Required
	TagType_BitsPerSample:                `TagType_BitsPerSample`,                // SHORT, *, # Default=1. See SamplesPerPixel
	TagType_Compression:                  `TagType_Compression`,                  // SHORT, 1, # Default=1
	TagType_PhotometricInterpretation:    `TagType_PhotometricInterpretation`,    // SHORT, 1,
	TagType_Threshholding:                `TagType_Threshholding`,                // SHORT, 1, # Default=1
	TagType_CellWidth:                    `TagType_CellWidth`,                    // SHORT, 1,
	TagType_CellLenght:                   `TagType_CellLenght`,                   // SHORT, 1,
	TagType_FillOrder:                    `TagType_FillOrder`,                    // SHORT, 1, # Default=1
	TagType_DocumentName:                 `TagType_DocumentName`,                 // ASCII
	TagType_ImageDescription:             `TagType_ImageDescription`,             // ASCII
	TagType_Make:                         `TagType_Make`,                         // ASCII
	TagType_Model:                        `TagType_Model`,                        // ASCII
	TagType_StripOffsets:                 `TagType_StripOffsets`,                 // SHORT/LONG/LONG8, *, # StripsPerImage
	TagType_Orientation:                  `TagType_Orientation`,                  // SHORT, 1, # Default=1
	TagType_SamplesPerPixel:              `TagType_SamplesPerPixel`,              // SHORT, 1, # Default=1
	TagType_RowsPerStrip:                 `TagType_RowsPerStrip`,                 // SHORT/LONG/LONG8, 1,
	TagType_StripByteCounts:              `TagType_StripByteCounts`,              // SHORT/LONG/LONG8, *, # StripsPerImage
	TagType_MinSampleValue:               `TagType_MinSampleValue`,               // SHORT,    *, # Default=0
	TagType_MaxSampleValue:               `TagType_MaxSampleValue`,               // SHORT,    *, # Default=2^BitsPerSample-1
	TagType_XResolution:                  `TagType_XResolution`,                  // RATIONAL, 1, # Required?
	TagType_YResolution:                  `TagType_YResolution`,                  // RATIONAL, 1, # Required?
	TagType_PlanarConfiguration:          `TagType_PlanarConfiguration`,          // SHORT,    1, # Defaule=1
	TagType_PageName:                     `TagType_PageName`,                     // ASCII
	TagType_XPosition:                    `TagType_XPosition`,                    // RATIONAL,   1
	TagType_YPosition:                    `TagType_YPosition`,                    // RATIONAL,   1
	TagType_FreeOffsets:                  `TagType_FreeOffsets`,                  // LONG/LONG8, *
	TagType_FreeByteCounts:               `TagType_FreeByteCounts`,               // LONG/LONG8, *
	TagType_GrayResponseUnit:             `TagType_GrayResponseUnit`,             // SHORT, 1,
	TagType_GrayResponseCurve:            `TagType_GrayResponseCurve`,            // SHORT, *, # 2**BitPerSample
	TagType_T4Options:                    `TagType_T4Options`,                    // LONG,  1, # Default=0
	TagType_T6Options:                    `TagType_T6Options`,                    // LONG,  1, # Default=0
	TagType_ResolutionUnit:               `TagType_ResolutionUnit`,               // SHORT, 1, # Default=2
	TagType_PageNumber:                   `TagType_PageNumber`,                   // SHORT, 2,
	TagType_TransferFunction:             `TagType_TransferFunction`,             // SHORT, *, # {1 or SamplesPerPixel}*2**BitPerSample
	TagType_Software:                     `TagType_Software`,                     // ASCII
	TagType_DateTime:                     `TagType_DateTime`,                     // ASCII, 20, # YYYY:MM:DD HH:MM:SS, include NULL
	TagType_Artist:                       `TagType_Artist`,                       // ASCII
	TagType_HostComputer:                 `TagType_HostComputer`,                 // ASCII
	TagType_Predictor:                    `TagType_Predictor`,                    // SHORT, 1, # Default=1
	TagType_WhitePoint:                   `TagType_WhitePoint`,                   // RATIONAL, 2
	TagType_PrimaryChromaticities:        `TagType_PrimaryChromaticities`,        // RATIONAL, 6
	TagType_ColorMap:                     `TagType_ColorMap`,                     // SHORT, *, # 3*(2**BitPerSample)
	TagType_HalftoneHints:                `TagType_HalftoneHints`,                // SHORT, 2
	TagType_TileWidth:                    `TagType_TileWidth`,                    // SHORT/LONG, 1
	TagType_TileLength:                   `TagType_TileLength`,                   // SHORT/LONG, 1
	TagType_TileOffsets:                  `TagType_TileOffsets`,                  // LONG/LONG8, *, # TilesPerImage
	TagType_TileByteCounts:               `TagType_TileByteCounts`,               // SHORT/LONG, *, # TilesPerImage
	TagType_BadFaxLines:                  `TagType_BadFaxLines`,                  // ingore # Used in the TIFF-F standard, denotes the number of 'bad' scan lines encountered by the facsimile device.
	TagType_CleanFaxData:                 `TagType_CleanFaxData`,                 // ingore # Used in the TIFF-F standard, indicates if 'bad' lines encountered during reception are stored in the data, or if 'bad' lines have been replaced by the receiver.
	TagType_ConsecutiveBadFaxLines:       `TagType_ConsecutiveBadFaxLines`,       // ingore # Used in the TIFF-F standard, denotes the maximum number of consecutive 'bad' scanlines received.
	TagType_SubIFD:                       `TagType_SubIFD`,                       // IFD,   *  # IFD pointer
	TagType_InkSet:                       `TagType_InkSet`,                       // SHORT, 1, # Default=1
	TagType_InkNames:                     `TagType_InkNames`,                     // ASCII
	TagType_NumberOfInks:                 `TagType_NumberOfInks`,                 // SHORT, 1, # Default=4
	TagType_DotRange:                     `TagType_DotRange`,                     // BYTE/SHORT, # Default=[0,2^BitsPerSample-1]
	TagType_TargetPrinter:                `TagType_TargetPrinter`,                // ASCII
	TagType_ExtraSamples:                 `TagType_ExtraSamples`,                 // BYTE,  1,
	TagType_SampleFormat:                 `TagType_SampleFormat`,                 // SHORT, *, # SamplesPerPixel. Default=1
	TagType_SMinSampleValue:              `TagType_SMinSampleValue`,              // *,     *, # SamplesPerPixel, try double
	TagType_SMaxSampleValue:              `TagType_SMaxSampleValue`,              // *,     *, # SamplesPerPixel, try double
	TagType_TransferRange:                `TagType_TransferRange`,                // SHORT, 6,
	TagType_ClipPath:                     `TagType_ClipPath`,                     // ingore # Mirrors the essentials of PostScript's path creation functionality.
	TagType_XClipPathUnits:               `TagType_XClipPathUnits`,               // ingore # The number of units that span the width of the image, in terms of integer ClipPath coordinates.
	TagType_YClipPathUnits:               `TagType_YClipPathUnits`,               // ingore # The number of units that span the height of the image, in terms of integer ClipPath coordinates.
	TagType_Indexed:                      `TagType_Indexed`,                      // ingore # Aims to broaden the support for indexed images to include support for any color space.
	TagType_JPEGTables:                   `TagType_JPEGTables`,                   // ingore # JPEG quantization and/or Huffman tables.
	TagType_OPIProxy:                     `TagType_OPIProxy`,                     // ingore # OPI-related.
	TagType_GlobalParametersIFD:          `TagType_GlobalParametersIFD`,          // ingore # Used in the TIFF-FX standard to point to an IFD containing tags that are globally applicable to the complete TIFF file.
	TagType_ProfileType:                  `TagType_ProfileType`,                  // ingore # Used in the TIFF-FX standard, denotes the type of data stored in this file or IFD.
	TagType_FaxProfile:                   `TagType_FaxProfile`,                   // ingore # Used in the TIFF-FX standard, denotes the 'profile' that applies to this file.
	TagType_CodingMethods:                `TagType_CodingMethods`,                // ingore # Used in the TIFF-FX standard, indicates which coding methods are used in the file.
	TagType_VersionYear:                  `TagType_VersionYear`,                  // ingore # Used in the TIFF-FX standard, denotes the year of the standard specified by the FaxProfile field.
	TagType_ModeNumber:                   `TagType_ModeNumber`,                   // ingore # Used in the TIFF-FX standard, denotes the mode of the standard specified by the FaxProfile field.
	TagType_Decode:                       `TagType_Decode`,                       // ingore # Used in the TIFF-F and TIFF-FX standards, holds information about the ITULAB (PhotometricInterpretation = 10) encoding.
	TagType_DefaultImageColor:            `TagType_DefaultImageColor`,            // ingore # Defined in the Mixed Raster Content part of RFC 2301, is the default color needed in areas where no image is available.
	TagType_JPEGProc:                     `TagType_JPEGProc`,                     // SHORT, 1,
	TagType_JPEGInterchangeFormat:        `TagType_JPEGInterchangeFormat`,        // LONG,  1,
	TagType_JPEGInterchangeFormatLength:  `TagType_JPEGInterchangeFormatLength`,  // LONG,  1,
	TagType_JPEGRestartInterval:          `TagType_JPEGRestartInterval`,          // SHORT, 1,
	TagType_JPEGLosslessPredictors:       `TagType_JPEGLosslessPredictors`,       // SHORT, *, # SamplesPerPixel
	TagType_JPEGPointTransforms:          `TagType_JPEGPointTransforms`,          // SHORT, *, # SamplesPerPixel
	TagType_JPEGQTables:                  `TagType_JPEGQTables`,                  // LONG,  *, # SamplesPerPixel
	TagType_JPEGDCTables:                 `TagType_JPEGDCTables`,                 // LONG,  *, # SamplesPerPixel
	TagType_JPEGACTables:                 `TagType_JPEGACTables`,                 // LONG,  *, # SamplesPerPixel
	TagType_YCbCrCoefficients:            `TagType_YCbCrCoefficients`,            // RATIONAL, 3
	TagType_YCbCrSubSampling:             `TagType_YCbCrSubSampling`,             // SHORT, 2, # Default=[2,2]
	TagType_YCbCrPositioning:             `TagType_YCbCrPositioning`,             // SHORT, 1, # Default=1
	TagType_ReferenceBlackWhite:          `TagType_ReferenceBlackWhite`,          // LONG , *, # 2*SamplesPerPixel
	TagType_StripRowCounts:               `TagType_StripRowCounts`,               // ingore # Defined in the Mixed Raster Content part of RFC 2301, used to replace RowsPerStrip for IFDs with variable-sized strips.
	TagType_XMP:                          `TagType_XMP`,                          // ingore # XML packet containing XMP metadata
	TagType_ImageID:                      `TagType_ImageID`,                      // ingore # OPI-related.
	TagType_ImageLayer:                   `TagType_ImageLayer`,                   // ingore # Defined in the Mixed Raster Content part of RFC 2301, used to denote the particular function of this Image in the mixed raster scheme.
	TagType_Copyright:                    `TagType_Copyright`,                    // ASCII
	TagType_WangAnnotation:               `TagType_WangAnnotation`,               // ingore # Annotation data, as used in 'Imaging for Windows'.
	TagType_MDFileTag:                    `TagType_MDFileTag`,                    // ingore # Specifies the pixel data format encoding in the Molecular Dynamics GEL file format.
	TagType_MDScalePixel:                 `TagType_MDScalePixel`,                 // ingore # Specifies a scale factor in the Molecular Dynamics GEL file format.
	TagType_MDColorTable:                 `TagType_MDColorTable`,                 // ingore # Used to specify the conversion from 16bit to 8bit in the Molecular Dynamics GEL file format.
	TagType_MDLabName:                    `TagType_MDLabName`,                    // ingore # Name of the lab that scanned this file, as used in the Molecular Dynamics GEL file format.
	TagType_MDSampleInfo:                 `TagType_MDSampleInfo`,                 // ingore # Information about the sample, as used in the Molecular Dynamics GEL file format.
	TagType_MDPrepDate:                   `TagType_MDPrepDate`,                   // ingore # Date the sample was prepared, as used in the Molecular Dynamics GEL file format.
	TagType_MDPrepTime:                   `TagType_MDPrepTime`,                   // ingore # Time the sample was prepared, as used in the Molecular Dynamics GEL file format.
	TagType_MDFileUnits:                  `TagType_MDFileUnits`,                  // ingore # Units for data in this file, as used in the Molecular Dynamics GEL file format.
	TagType_ModelPixelScaleTag:           `TagType_ModelPixelScaleTag`,           // DOUBLE # Used in interchangeable GeoTIFF files.
	TagType_IPTC:                         `TagType_IPTC`,                         // ingore # IPTC (International Press Telecommunications Council) metadata.
	TagType_INGRPacketDataTag:            `TagType_INGRPacketDataTag`,            // ingore # Intergraph Application specific storage.
	TagType_INGRFlagRegisters:            `TagType_INGRFlagRegisters`,            // ingore # Intergraph Application specific flags.
	TagType_IrasBTransformationMatrix:    `TagType_IrasBTransformationMatrix`,    // DOUBLE, 17 # Originally part of Intergraph's GeoTIFF tags, but likely understood by IrasB only.
	TagType_ModelTiepointTag:             `TagType_ModelTiepointTag`,             // DOUBLE # Originally part of Intergraph's GeoTIFF tags, but now used in interchangeable GeoTIFF files.
	TagType_ModelTransformationTag:       `TagType_ModelTransformationTag`,       // DOUBLE, 16 # Used in interchangeable GeoTIFF files.
	TagType_Photoshop:                    `TagType_Photoshop`,                    // ingore # Collection of Photoshop 'Image Resource Blocks'.
	TagType_ExifIFD:                      `TagType_ExifIFD`,                      // IFD    # A pointer to the Exif IFD.
	TagType_ICCProfile:                   `TagType_ICCProfile`,                   // ingore # ICC profile data.
	TagType_GeoKeyDirectoryTag:           `TagType_GeoKeyDirectoryTag`,           // SHORT, *, # >= 4
	TagType_GeoDoubleParamsTag:           `TagType_GeoDoubleParamsTag`,           // DOUBLE
	TagType_GeoAsciiParamsTag:            `TagType_GeoAsciiParamsTag`,            // ASCII
	TagType_GPSIFD:                       `TagType_GPSIFD`,                       // IFD    # A pointer to the Exif-related GPS Info IFD.
	TagType_HylaFAXFaxRecvParams:         `TagType_HylaFAXFaxRecvParams`,         // ingore # Used by HylaFAX.
	TagType_HylaFAXFaxSubAddress:         `TagType_HylaFAXFaxSubAddress`,         // ingore # Used by HylaFAX.
	TagType_HylaFAXFaxRecvTime:           `TagType_HylaFAXFaxRecvTime`,           // ingore # Used by HylaFAX.
	TagType_ImageSourceData:              `TagType_ImageSourceData`,              // ingore # Used by Adobe Photoshop.
	TagType_InteroperabilityIFD:          `TagType_InteroperabilityIFD`,          // IFD    # A pointer to the Exif-related Interoperability IFD.
	TagType_GDAL_METADATA:                `TagType_GDAL_METADATA`,                // ingore # Used by the GDAL library, holds an XML list of name=value 'metadata' values about the image as a whole, and about specific samples.
	TagType_GDAL_NODATA:                  `TagType_GDAL_NODATA`,                  // ingore # Used by the GDAL library, contains an ASCII encoded nodata or background pixel value.
	TagType_OceScanjobDescription:        `TagType_OceScanjobDescription`,        // ingore # Used in the Oce scanning process.
	TagType_OceApplicationSelector:       `TagType_OceApplicationSelector`,       // ingore # Used in the Oce scanning process.
	TagType_OceIdentificationNumber:      `TagType_OceIdentificationNumber`,      // ingore # Used in the Oce scanning process.
	TagType_OceImageLogicCharacteristics: `TagType_OceImageLogicCharacteristics`, // ingore # Used in the Oce scanning process.
	TagType_DNGVersion:                   `TagType_DNGVersion`,                   // ingore # Used in IFD 0 of DNG files.
	TagType_DNGBackwardVersion:           `TagType_DNGBackwardVersion`,           // ingore # Used in IFD 0 of DNG files.
	TagType_UniqueCameraModel:            `TagType_UniqueCameraModel`,            // ingore # Used in IFD 0 of DNG files.
	TagType_LocalizedCameraModel:         `TagType_LocalizedCameraModel`,         // ingore # Used in IFD 0 of DNG files.
	TagType_CFAPlaneColor:                `TagType_CFAPlaneColor`,                // ingore # Used in Raw IFD of DNG files.
	TagType_CFALayout:                    `TagType_CFALayout`,                    // ingore # Used in Raw IFD of DNG files.
	TagType_LinearizationTable:           `TagType_LinearizationTable`,           // ingore # Used in Raw IFD of DNG files.
	TagType_BlackLevelRepeatDim:          `TagType_BlackLevelRepeatDim`,          // ingore # Used in Raw IFD of DNG files.
	TagType_BlackLevel:                   `TagType_BlackLevel`,                   // ingore # Used in Raw IFD of DNG files.
	TagType_BlackLevelDeltaH:             `TagType_BlackLevelDeltaH`,             // ingore # Used in Raw IFD of DNG files.
	TagType_BlackLevelDeltaV:             `TagType_BlackLevelDeltaV`,             // ingore # Used in Raw IFD of DNG files.
	TagType_WhiteLevel:                   `TagType_WhiteLevel`,                   // ingore # Used in Raw IFD of DNG files.
	TagType_DefaultScale:                 `TagType_DefaultScale`,                 // ingore # Used in Raw IFD of DNG files.
	TagType_DefaultCropOrigin:            `TagType_DefaultCropOrigin`,            // ingore # Used in Raw IFD of DNG files.
	TagType_DefaultCropSize:              `TagType_DefaultCropSize`,              // ingore # Used in Raw IFD of DNG files.
	TagType_ColorMatrix1:                 `TagType_ColorMatrix1`,                 // ingore # Used in IFD 0 of DNG files.
	TagType_ColorMatrix2:                 `TagType_ColorMatrix2`,                 // ingore # Used in IFD 0 of DNG files.
	TagType_CameraCalibration1:           `TagType_CameraCalibration1`,           // ingore # Used in IFD 0 of DNG files.
	TagType_CameraCalibration2:           `TagType_CameraCalibration2`,           // ingore # Used in IFD 0 of DNG files.
	TagType_ReductionMatrix1:             `TagType_ReductionMatrix1`,             // ingore # Used in IFD 0 of DNG files.
	TagType_ReductionMatrix2:             `TagType_ReductionMatrix2`,             // ingore # Used in IFD 0 of DNG files.
	TagType_AnalogBalance:                `TagType_AnalogBalance`,                // ingore # Used in IFD 0 of DNG files.
	TagType_AsShotNeutral:                `TagType_AsShotNeutral`,                // ingore # Used in IFD 0 of DNG files.
	TagType_AsShotWhiteXY:                `TagType_AsShotWhiteXY`,                // ingore # Used in IFD 0 of DNG files.
	TagType_BaselineExposure:             `TagType_BaselineExposure`,             // ingore # Used in IFD 0 of DNG files.
	TagType_BaselineNoise:                `TagType_BaselineNoise`,                // ingore # Used in IFD 0 of DNG files.
	TagType_BaselineSharpness:            `TagType_BaselineSharpness`,            // ingore # Used in IFD 0 of DNG files.
	TagType_BayerGreenSplit:              `TagType_BayerGreenSplit`,              // ingore # Used in Raw IFD of DNG files.
	TagType_LinearResponseLimit:          `TagType_LinearResponseLimit`,          // ingore # Used in IFD 0 of DNG files.
	TagType_CameraSerialNumber:           `TagType_CameraSerialNumber`,           // ingore # Used in IFD 0 of DNG files.
	TagType_LensInfo:                     `TagType_LensInfo`,                     // ingore # Used in IFD 0 of DNG files.
	TagType_ChromaBlurRadius:             `TagType_ChromaBlurRadius`,             // ingore # Used in Raw IFD of DNG files.
	TagType_AntiAliasStrength:            `TagType_AntiAliasStrength`,            // ingore # Used in Raw IFD of DNG files.
	TagType_DNGPrivateData:               `TagType_DNGPrivateData`,               // ingore # Used in IFD 0 of DNG files.
	TagType_MakerNoteSafety:              `TagType_MakerNoteSafety`,              // ingore # Used in IFD 0 of DNG files.
	TagType_CalibrationIlluminant1:       `TagType_CalibrationIlluminant1`,       // ingore # Used in IFD 0 of DNG files.
	TagType_CalibrationIlluminant2:       `TagType_CalibrationIlluminant2`,       // ingore # Used in IFD 0 of DNG files.
	TagType_BestQualityScale:             `TagType_BestQualityScale`,             // ingore # Used in Raw IFD of DNG files.
	TagType_AliasLayerMetadata:           `TagType_AliasLayerMetadata`,           // ingore # Alias Sketchbook Pro layer usage description.
}

var _TagType_TypesTable = map[TagType][]DataType{
	TagType_NewSubfileType:              []DataType{DataType_Long},
	TagType_SubfileType:                 []DataType{DataType_Short},
	TagType_ImageWidth:                  []DataType{DataType_Short, DataType_Long, DataType_Long8},
	TagType_ImageLength:                 []DataType{DataType_Short, DataType_Long, DataType_Long8},
	TagType_BitsPerSample:               []DataType{DataType_Short},
	TagType_Compression:                 []DataType{DataType_Short},
	TagType_PhotometricInterpretation:   []DataType{DataType_Short},
	TagType_Threshholding:               []DataType{DataType_Short},
	TagType_CellWidth:                   []DataType{DataType_Short},
	TagType_CellLenght:                  []DataType{DataType_Short},
	TagType_FillOrder:                   []DataType{DataType_Short},
	TagType_DocumentName:                []DataType{DataType_ASCII},
	TagType_ImageDescription:            []DataType{DataType_ASCII},
	TagType_Make:                        []DataType{DataType_ASCII},
	TagType_Model:                       []DataType{DataType_ASCII},
	TagType_StripOffsets:                []DataType{DataType_Short, DataType_Long, DataType_Long8},
	TagType_Orientation:                 []DataType{DataType_Short},
	TagType_SamplesPerPixel:             []DataType{DataType_Short},
	TagType_RowsPerStrip:                []DataType{DataType_Short, DataType_Long, DataType_Long8},
	TagType_StripByteCounts:             []DataType{DataType_Short, DataType_Long, DataType_Long8},
	TagType_MinSampleValue:              []DataType{DataType_Short},
	TagType_MaxSampleValue:              []DataType{DataType_Short},
	TagType_XResolution:                 []DataType{DataType_Rational},
	TagType_YResolution:                 []DataType{DataType_Rational},
	TagType_PlanarConfiguration:         []DataType{DataType_Short},
	TagType_PageName:                    []DataType{DataType_ASCII},
	TagType_XPosition:                   []DataType{DataType_Rational},
	TagType_YPosition:                   []DataType{DataType_Rational},
	TagType_FreeOffsets:                 []DataType{DataType_Long, DataType_Long8},
	TagType_FreeByteCounts:              []DataType{DataType_Long, DataType_Long8},
	TagType_GrayResponseUnit:            []DataType{DataType_Short},
	TagType_GrayResponseCurve:           []DataType{DataType_Short},
	TagType_T4Options:                   []DataType{DataType_Long},
	TagType_T6Options:                   []DataType{DataType_Long},
	TagType_ResolutionUnit:              []DataType{DataType_Short},
	TagType_PageNumber:                  []DataType{DataType_Short},
	TagType_TransferFunction:            []DataType{DataType_Short},
	TagType_Software:                    []DataType{DataType_ASCII},
	TagType_DateTime:                    []DataType{DataType_ASCII},
	TagType_Artist:                      []DataType{DataType_ASCII},
	TagType_HostComputer:                []DataType{DataType_ASCII},
	TagType_Predictor:                   []DataType{DataType_Short},
	TagType_WhitePoint:                  []DataType{DataType_Rational},
	TagType_PrimaryChromaticities:       []DataType{DataType_Rational},
	TagType_ColorMap:                    []DataType{DataType_Short},
	TagType_HalftoneHints:               []DataType{DataType_Short},
	TagType_TileWidth:                   []DataType{DataType_Short, DataType_Long},
	TagType_TileLength:                  []DataType{DataType_Short, DataType_Long},
	TagType_TileOffsets:                 []DataType{DataType_Long, DataType_Long8},
	TagType_TileByteCounts:              []DataType{DataType_Short, DataType_Long},
	TagType_SubIFD:                      []DataType{DataType_IFD},
	TagType_InkSet:                      []DataType{DataType_Short},
	TagType_InkNames:                    []DataType{DataType_ASCII},
	TagType_NumberOfInks:                []DataType{DataType_Short},
	TagType_DotRange:                    []DataType{DataType_Byte, DataType_Short},
	TagType_TargetPrinter:               []DataType{DataType_ASCII},
	TagType_ExtraSamples:                []DataType{DataType_Byte},
	TagType_SampleFormat:                []DataType{DataType_Short},
	TagType_TransferRange:               []DataType{DataType_Short},
	TagType_JPEGProc:                    []DataType{DataType_Short},
	TagType_JPEGInterchangeFormat:       []DataType{DataType_Long},
	TagType_JPEGInterchangeFormatLength: []DataType{DataType_Long},
	TagType_JPEGRestartInterval:         []DataType{DataType_Short},
	TagType_JPEGLosslessPredictors:      []DataType{DataType_Short},
	TagType_JPEGPointTransforms:         []DataType{DataType_Short},
	TagType_JPEGQTables:                 []DataType{DataType_Long},
	TagType_JPEGDCTables:                []DataType{DataType_Long},
	TagType_JPEGACTables:                []DataType{DataType_Long},
	TagType_YCbCrCoefficients:           []DataType{DataType_Rational},
	TagType_YCbCrSubSampling:            []DataType{DataType_Short},
	TagType_YCbCrPositioning:            []DataType{DataType_Short},
	TagType_ReferenceBlackWhite:         []DataType{DataType_Long},
	TagType_Copyright:                   []DataType{DataType_ASCII},
	TagType_ModelPixelScaleTag:          []DataType{DataType_Double},
	TagType_IrasBTransformationMatrix:   []DataType{DataType_Double},
	TagType_ModelTiepointTag:            []DataType{DataType_Double},
	TagType_ModelTransformationTag:      []DataType{DataType_Double},
	TagType_ExifIFD:                     []DataType{DataType_IFD},
	TagType_GeoKeyDirectoryTag:          []DataType{DataType_Short},
	TagType_GeoDoubleParamsTag:          []DataType{DataType_Double},
	TagType_GeoAsciiParamsTag:           []DataType{DataType_ASCII},
	TagType_GPSIFD:                      []DataType{DataType_IFD},
	TagType_InteroperabilityIFD:         []DataType{DataType_IFD},
}

var _TagType_NumsTable = map[TagType][]int{
	TagType_NewSubfileType:              []int{1},
	TagType_SubfileType:                 []int{1},
	TagType_ImageWidth:                  []int{1},
	TagType_ImageLength:                 []int{1},
	TagType_Compression:                 []int{1},
	TagType_PhotometricInterpretation:   []int{1},
	TagType_Threshholding:               []int{1},
	TagType_CellWidth:                   []int{1},
	TagType_CellLenght:                  []int{1},
	TagType_FillOrder:                   []int{1},
	TagType_Orientation:                 []int{1},
	TagType_SamplesPerPixel:             []int{1},
	TagType_RowsPerStrip:                []int{1},
	TagType_XResolution:                 []int{1},
	TagType_YResolution:                 []int{1},
	TagType_PlanarConfiguration:         []int{1},
	TagType_XPosition:                   []int{1},
	TagType_YPosition:                   []int{1},
	TagType_GrayResponseUnit:            []int{1},
	TagType_T4Options:                   []int{1},
	TagType_T6Options:                   []int{1},
	TagType_ResolutionUnit:              []int{1},
	TagType_PageNumber:                  []int{2},
	TagType_DateTime:                    []int{20},
	TagType_Predictor:                   []int{1},
	TagType_WhitePoint:                  []int{2},
	TagType_PrimaryChromaticities:       []int{6},
	TagType_HalftoneHints:               []int{2},
	TagType_TileWidth:                   []int{1},
	TagType_TileLength:                  []int{1},
	TagType_InkSet:                      []int{1},
	TagType_NumberOfInks:                []int{1},
	TagType_ExtraSamples:                []int{1},
	TagType_TransferRange:               []int{6},
	TagType_JPEGProc:                    []int{1},
	TagType_JPEGInterchangeFormat:       []int{1},
	TagType_JPEGInterchangeFormatLength: []int{1},
	TagType_JPEGRestartInterval:         []int{1},
	TagType_YCbCrCoefficients:           []int{3},
	TagType_YCbCrSubSampling:            []int{2},
	TagType_YCbCrPositioning:            []int{1},
	TagType_IrasBTransformationMatrix:   []int{17},
	TagType_ModelTransformationTag:      []int{16},
}

type TagGetter interface {
	GetNewSubfileType() (value int64, ok bool)
	GetSubfileType() (value int64, ok bool)
	GetImageWidth() (value int64, ok bool)
	GetImageLength() (value int64, ok bool)
	GetBitsPerSample() (value []int64, ok bool)
	GetCompression() (value TagValue_CompressionType, ok bool)
	GetPhotometricInterpretation() (value TagValue_PhotometricType, ok bool)
	GetThreshholding() (value int64, ok bool)
	GetCellWidth() (value int64, ok bool)
	GetCellLenght() (value int64, ok bool)
	GetFillOrder() (value int64, ok bool)
	GetDocumentName() (value string, ok bool)
	GetImageDescription() (value string, ok bool)
	GetMake() (value string, ok bool)
	GetModel() (value string, ok bool)
	GetStripOffsets() (value []int64, ok bool)
	GetOrientation() (value int64, ok bool)
	GetSamplesPerPixel() (value int64, ok bool)
	GetRowsPerStrip() (value int64, ok bool)
	GetStripByteCounts() (value []int64, ok bool)
	GetMinSampleValue() (value []int64, ok bool)
	GetMaxSampleValue() (value []int64, ok bool)
	GetXResolution() (value [2]int64, ok bool)
	GetYResolution() (value [2]int64, ok bool)
	GetPlanarConfiguration() (value int64, ok bool)
	GetPageName() (value string, ok bool)
	GetXPosition() (value [2]int64, ok bool)
	GetYPosition() (value [2]int64, ok bool)
	GetFreeOffsets() (value []int64, ok bool)
	GetFreeByteCounts() (value []int64, ok bool)
	GetGrayResponseUnit() (value int64, ok bool)
	GetGrayResponseCurve() (value []int64, ok bool)
	GetT4Options() (value int64, ok bool)
	GetT6Options() (value int64, ok bool)
	GetResolutionUnit() (value TagValue_ResolutionUnitType, ok bool)
	GetPageNumber() (value []int64, ok bool)
	GetTransferFunction() (value []int64, ok bool)
	GetSoftware() (value string, ok bool)
	GetDateTime() (value time.Time, ok bool)
	GetArtist() (value string, ok bool)
	GetHostComputer() (value string, ok bool)
	GetPredictor() (value TagValue_PredictorType, ok bool)
	GetWhitePoint() (value [][2]int64, ok bool)
	GetPrimaryChromaticities() (value [][2]int64, ok bool)
	GetColorMap() (value [][3]uint16, ok bool)
	GetHalftoneHints() (value []int64, ok bool)
	GetTileWidth() (value int64, ok bool)
	GetTileLength() (value int64, ok bool)
	GetTileOffsets() (value []int64, ok bool)
	GetTileByteCounts() (value []int64, ok bool)
	GetSubIFD() (value []int64, ok bool)
	GetInkSet() (value int64, ok bool)
	GetInkNames() (value string, ok bool)
	GetNumberOfInks() (value int64, ok bool)
	GetDotRange() (value []int64, ok bool)
	GetTargetPrinter() (value string, ok bool)
	GetExtraSamples() (value int64, ok bool)
	GetSampleFormat() (value []int64, ok bool)
	GetSMinSampleValue() (value []float64, ok bool)
	GetSMaxSampleValue() (value []float64, ok bool)
	GetTransferRange() (value []int64, ok bool)
	GetJPEGProc() (value int64, ok bool)
	GetJPEGInterchangeFormat() (value int64, ok bool)
	GetJPEGInterchangeFormatLength() (value int64, ok bool)
	GetJPEGRestartInterval() (value int64, ok bool)
	GetJPEGLosslessPredictors() (value []int64, ok bool)
	GetJPEGPointTransforms() (value []int64, ok bool)
	GetJPEGQTables() (value []int64, ok bool)
	GetJPEGDCTables() (value []int64, ok bool)
	GetJPEGACTables() (value []int64, ok bool)
	GetYCbCrCoefficients() (value [][2]int64, ok bool)
	GetYCbCrSubSampling() (value []int64, ok bool)
	GetYCbCrPositioning() (value int64, ok bool)
	GetReferenceBlackWhite() (value []int64, ok bool)
	GetCopyright() (value string, ok bool)
	GetModelPixelScaleTag() (value []float64, ok bool)
	GetIrasBTransformationMatrix() (value []float64, ok bool)
	GetModelTiepointTag() (value []float64, ok bool)
	GetModelTransformationTag() (value []float64, ok bool)
	GetExifIFD() (value []int64, ok bool)
	GetGeoKeyDirectoryTag() (value []int64, ok bool)
	GetGeoDoubleParamsTag() (value []float64, ok bool)
	GetGeoAsciiParamsTag() (value string, ok bool)
	GetGPSIFD() (value []int64, ok bool)
	GetInteroperabilityIFD() (value []int64, ok bool)

	GetUnknown(tag TagType) (value []byte, ok bool)

	private()
}

type TagSetter interface {
	SetNewSubfileType(value int64) (ok bool)
	SetSubfileType(value int64) (ok bool)
	SetImageWidth(value int64) (ok bool)
	SetImageLength(value int64) (ok bool)
	SetBitsPerSample(value []int64) (ok bool)
	SetCompression(value TagValue_CompressionType) (ok bool)
	SetPhotometricInterpretation(value TagValue_PhotometricType) (ok bool)
	SetThreshholding(value int64) (ok bool)
	SetCellWidth(value int64) (ok bool)
	SetCellLenght(value int64) (ok bool)
	SetFillOrder(value int64) (ok bool)
	SetDocumentName(value string) (ok bool)
	SetImageDescription(value string) (ok bool)
	SetMake(value string) (ok bool)
	SetModel(value string) (ok bool)
	SetStripOffsets(value []int64) (ok bool)
	SetOrientation(value int64) (ok bool)
	SetSamplesPerPixel(value int64) (ok bool)
	SetRowsPerStrip(value int64) (ok bool)
	SetStripByteCounts(value []int64) (ok bool)
	SetMinSampleValue(value []int64) (ok bool)
	SetMaxSampleValue(value []int64) (ok bool)
	SetXResolution(value [2]int64) (ok bool)
	SetYResolution(value [2]int64) (ok bool)
	SetPlanarConfiguration(value int64) (ok bool)
	SetPageName(value string) (ok bool)
	SetXPosition(value [2]int64) (ok bool)
	SetYPosition(value [2]int64) (ok bool)
	SetFreeOffsets(value []int64) (ok bool)
	SetFreeByteCounts(value []int64) (ok bool)
	SetGrayResponseUnit(value int64) (ok bool)
	SetGrayResponseCurve(value []int64) (ok bool)
	SetT4Options(value int64) (ok bool)
	SetT6Options(value int64) (ok bool)
	SetResolutionUnit(value TagValue_ResolutionUnitType) (ok bool)
	SetPageNumber(value []int64) (ok bool)
	SetTransferFunction(value []int64) (ok bool)
	SetSoftware(value string) (ok bool)
	SetDateTime(value time.Time) (ok bool)
	SetArtist(value string) (ok bool)
	SetHostComputer(value string) (ok bool)
	SetPredictor(value TagValue_PredictorType) (ok bool)
	SetWhitePoint(value [][2]int64) (ok bool)
	SetPrimaryChromaticities(value [][2]int64) (ok bool)
	SetColorMap(value [][3]uint16) (ok bool)
	SetHalftoneHints(value []int64) (ok bool)
	SetTileWidth(value int64) (ok bool)
	SetTileLength(value int64) (ok bool)
	SetTileOffsets(value []int64) (ok bool)
	SetTileByteCounts(value []int64) (ok bool)
	SetSubIFD(value []int64) (ok bool)
	SetInkSet(value int64) (ok bool)
	SetInkNames(value string) (ok bool)
	SetNumberOfInks(value int64) (ok bool)
	SetDotRange(value []int64) (ok bool)
	SetTargetPrinter(value string) (ok bool)
	SetExtraSamples(value int64) (ok bool)
	SetSampleFormat(value []int64) (ok bool)
	SetSMinSampleValue(value []float64) (ok bool)
	SetSMaxSampleValue(value []float64) (ok bool)
	SetTransferRange(value []int64) (ok bool)
	SetJPEGProc(value int64) (ok bool)
	SetJPEGInterchangeFormat(value int64) (ok bool)
	SetJPEGInterchangeFormatLength(value int64) (ok bool)
	SetJPEGRestartInterval(value int64) (ok bool)
	SetJPEGLosslessPredictors(value []int64) (ok bool)
	SetJPEGPointTransforms(value []int64) (ok bool)
	SetJPEGQTables(value []int64) (ok bool)
	SetJPEGDCTables(value []int64) (ok bool)
	SetJPEGACTables(value []int64) (ok bool)
	SetYCbCrCoefficients(value [][2]int64) (ok bool)
	SetYCbCrSubSampling(value []int64) (ok bool)
	SetYCbCrPositioning(value int64) (ok bool)
	SetReferenceBlackWhite(value []int64) (ok bool)
	SetCopyright(value string) (ok bool)
	SetModelPixelScaleTag(value []float64) (ok bool)
	SetIrasBTransformationMatrix(value []float64) (ok bool)
	SetModelTiepointTag(value []float64) (ok bool)
	SetModelTransformationTag(value []float64) (ok bool)
	SetExifIFD(value []int64) (ok bool)
	SetGeoKeyDirectoryTag(value []int64) (ok bool)
	SetGeoDoubleParamsTag(value []float64) (ok bool)
	SetGeoAsciiParamsTag(value string) (ok bool)
	SetGPSIFD(value []int64) (ok bool)
	SetInteroperabilityIFD(value []int64) (ok bool)

	SetUnknown(tag TagType, value interface{}) (ok bool)

	private()
}

func (p TagType) String() string {
	if name, ok := _TagTypeTable[p]; ok {
		return name
	}
	return fmt.Sprintf("TagType_Unknown(%d)", uint16(p))
}

var _TagValue_NewSubfileTypeTable = map[TagValue_NewSubfileType]string{
	TagValue_NewSubfileType_Nil:               `TagValue_NewSubfileType_Nil`,               //
	TagValue_NewSubfileType_Reduced:           `TagValue_NewSubfileType_Reduced`,           // # bit0, reduced resolution version
	TagValue_NewSubfileType_Page:              `TagValue_NewSubfileType_Page`,              // # bit1, one page of many
	TagValue_NewSubfileType_Reduced_Page:      `TagValue_NewSubfileType_Reduced_Page`,      //
	TagValue_NewSubfileType_Mask:              `TagValue_NewSubfileType_Mask`,              // # bit2, transparency mask
	TagValue_NewSubfileType_Reduced_Mask:      `TagValue_NewSubfileType_Reduced_Mask`,      //
	TagValue_NewSubfileType_Page_Mask:         `TagValue_NewSubfileType_Page_Mask`,         //
	TagValue_NewSubfileType_Reduced_Page_Mask: `TagValue_NewSubfileType_Reduced_Page_Mask`, //
}

func (p TagValue_NewSubfileType) String() string {
	if name, ok := _TagValue_NewSubfileTypeTable[p]; ok {
		return name
	}
	return fmt.Sprintf("TagValue_NewSubfileType_Unknown(%d)", uint16(p))
}

var _TagValue_SubfileTypeTable = map[TagValue_SubfileType]string{
	TagValue_SubfileType_Image:        `TagValue_SubfileType_Image`,        // # full resolution image data
	TagValue_SubfileType_ReducedImage: `TagValue_SubfileType_ReducedImage`, // # reduced size image data
	TagValue_SubfileType_Page:         `TagValue_SubfileType_Page`,         // # one page of many
}

func (p TagValue_SubfileType) String() string {
	if name, ok := _TagValue_SubfileTypeTable[p]; ok {
		return name
	}
	return fmt.Sprintf("TagValue_SubfileType_Unknown(%d)", uint16(p))
}

var _TagValue_CompressionTypeTable = map[TagValue_CompressionType]string{
	TagValue_CompressionType_Nil:        `TagValue_CompressionType_Nil`,        //
	TagValue_CompressionType_None:       `TagValue_CompressionType_None`,       //
	TagValue_CompressionType_CCITT:      `TagValue_CompressionType_CCITT`,      //
	TagValue_CompressionType_G3:         `TagValue_CompressionType_G3`,         // # Group 3 Fax.
	TagValue_CompressionType_G4:         `TagValue_CompressionType_G4`,         // # Group 4 Fax.
	TagValue_CompressionType_LZW:        `TagValue_CompressionType_LZW`,        //
	TagValue_CompressionType_JPEGOld:    `TagValue_CompressionType_JPEGOld`,    // # Superseded by cJPEG.
	TagValue_CompressionType_JPEG:       `TagValue_CompressionType_JPEG`,       //
	TagValue_CompressionType_Deflate:    `TagValue_CompressionType_Deflate`,    // # zlib compression.
	TagValue_CompressionType_PackBits:   `TagValue_CompressionType_PackBits`,   //
	TagValue_CompressionType_DeflateOld: `TagValue_CompressionType_DeflateOld`, // # Superseded by cDeflate.
}

func (p TagValue_CompressionType) String() string {
	if name, ok := _TagValue_CompressionTypeTable[p]; ok {
		return name
	}
	return fmt.Sprintf("TagValue_CompressionType_Unknown(%d)", uint16(p))
}

var _TagValue_PhotometricTypeTable = map[TagValue_PhotometricType]string{
	TagValue_PhotometricType_WhiteIsZero: `TagValue_PhotometricType_WhiteIsZero`, //
	TagValue_PhotometricType_BlackIsZero: `TagValue_PhotometricType_BlackIsZero`, //
	TagValue_PhotometricType_RGB:         `TagValue_PhotometricType_RGB`,         //
	TagValue_PhotometricType_Paletted:    `TagValue_PhotometricType_Paletted`,    //
	TagValue_PhotometricType_TransMask:   `TagValue_PhotometricType_TransMask`,   // # transparency mask
	TagValue_PhotometricType_CMYK:        `TagValue_PhotometricType_CMYK`,        //
	TagValue_PhotometricType_YCbCr:       `TagValue_PhotometricType_YCbCr`,       //
	TagValue_PhotometricType_CIELab:      `TagValue_PhotometricType_CIELab`,      //
}

func (p TagValue_PhotometricType) String() string {
	if name, ok := _TagValue_PhotometricTypeTable[p]; ok {
		return name
	}
	return fmt.Sprintf("TagValue_PhotometricType_Unknown(%d)", uint16(p))
}

var _TagValue_PredictorTypeTable = map[TagValue_PredictorType]string{
	TagValue_PredictorType_None:       `TagValue_PredictorType_None`,       //
	TagValue_PredictorType_Horizontal: `TagValue_PredictorType_Horizontal`, //
}

func (p TagValue_PredictorType) String() string {
	if name, ok := _TagValue_PredictorTypeTable[p]; ok {
		return name
	}
	return fmt.Sprintf("TagValue_PredictorType_Unknown(%d)", uint16(p))
}

var _TagValue_ResolutionUnitTypeTable = map[TagValue_ResolutionUnitType]string{
	TagValue_ResolutionUnitType_None:    `TagValue_ResolutionUnitType_None`,    //
	TagValue_ResolutionUnitType_PerInch: `TagValue_ResolutionUnitType_PerInch`, // # Dots per inch.
	TagValue_ResolutionUnitType_PerCM:   `TagValue_ResolutionUnitType_PerCM`,   // # Dots per centimeter.
}

func (p TagValue_ResolutionUnitType) String() string {
	if name, ok := _TagValue_ResolutionUnitTypeTable[p]; ok {
		return name
	}
	return fmt.Sprintf("TagValue_ResolutionUnitType_Unknown(%d)", uint16(p))
}

var _TagValue_SampleFormatTypeTable = map[TagValue_SampleFormatType]string{
	TagValue_SampleFormatType_Uint:      `TagValue_SampleFormatType_Uint`,      //
	TagValue_SampleFormatType_TwoInt:    `TagValue_SampleFormatType_TwoInt`,    //
	TagValue_SampleFormatType_Float:     `TagValue_SampleFormatType_Float`,     //
	TagValue_SampleFormatType_Undefined: `TagValue_SampleFormatType_Undefined`, //
}

func (p TagValue_SampleFormatType) String() string {
	if name, ok := _TagValue_SampleFormatTypeTable[p]; ok {
		return name
	}
	return fmt.Sprintf("TagValue_SampleFormatType_Unknown(%d)", uint16(p))
}

var _ExifIFD_TagTypeTable = map[ExifIFD_TagType]string{
	ExifIFD_TagType_ExposureTime:             `ExifIFD_TagType_ExposureTime`,             // ingore # Exposure time, given in seconds.
	ExifIFD_TagType_FNumber:                  `ExifIFD_TagType_FNumber`,                  // ingore # The F number.
	ExifIFD_TagType_ExposureProgram:          `ExifIFD_TagType_ExposureProgram`,          // ingore # The class of the program used by the camera to set exposure when the picture is taken.
	ExifIFD_TagType_SpectralSensitivity:      `ExifIFD_TagType_SpectralSensitivity`,      // ingore # Indicates the spectral sensitivity of each channel of the camera used.
	ExifIFD_TagType_ISOSpeedRatings:          `ExifIFD_TagType_ISOSpeedRatings`,          // ingore # Indicates the ISO Speed and ISO Latitude of the camera or input device as specified in ISO 12232.
	ExifIFD_TagType_OECF:                     `ExifIFD_TagType_OECF`,                     // ingore # Indicates the Opto-Electric Conversion Function (OECF) specified in ISO 14524.
	ExifIFD_TagType_ExifVersion:              `ExifIFD_TagType_ExifVersion`,              // ingore # The version of the supported Exif standard.
	ExifIFD_TagType_DateTimeOriginal:         `ExifIFD_TagType_DateTimeOriginal`,         // ingore # The date and time when the original image data was generated.
	ExifIFD_TagType_DateTimeDigitized:        `ExifIFD_TagType_DateTimeDigitized`,        // ingore # The date and time when the image was stored as digital data.
	ExifIFD_TagType_ComponentsConfiguration:  `ExifIFD_TagType_ComponentsConfiguration`,  // ingore # Specific to compressed data; specifies the channels and complements PhotometricInterpretation
	ExifIFD_TagType_CompressedBitsPerPixel:   `ExifIFD_TagType_CompressedBitsPerPixel`,   // ingore # Specific to compressed data; states the compressed bits per pixel.
	ExifIFD_TagType_ShutterSpeedValue:        `ExifIFD_TagType_ShutterSpeedValue`,        // ingore # Shutter speed.
	ExifIFD_TagType_ApertureValue:            `ExifIFD_TagType_ApertureValue`,            // ingore # The lens aperture.
	ExifIFD_TagType_BrightnessValue:          `ExifIFD_TagType_BrightnessValue`,          // ingore # The value of brightness.
	ExifIFD_TagType_ExposureBiasValue:        `ExifIFD_TagType_ExposureBiasValue`,        // ingore # The exposure bias.
	ExifIFD_TagType_MaxApertureValue:         `ExifIFD_TagType_MaxApertureValue`,         // ingore # The smallest F number of the lens.
	ExifIFD_TagType_SubjectDistance:          `ExifIFD_TagType_SubjectDistance`,          // ingore # The distance to the subject, given in meters.
	ExifIFD_TagType_MeteringMode:             `ExifIFD_TagType_MeteringMode`,             // ingore # The metering mode.
	ExifIFD_TagType_LightSource:              `ExifIFD_TagType_LightSource`,              // ingore # The kind of light source.
	ExifIFD_TagType_Flash:                    `ExifIFD_TagType_Flash`,                    // ingore # Indicates the status of flash when the image was shot.
	ExifIFD_TagType_FocalLength:              `ExifIFD_TagType_FocalLength`,              // ingore # The actual focal length of the lens, in mm.
	ExifIFD_TagType_SubjectArea:              `ExifIFD_TagType_SubjectArea`,              // ingore # Indicates the location and area of the main subject in the overall scene.
	ExifIFD_TagType_MakerNote:                `ExifIFD_TagType_MakerNote`,                // ingore # Manufacturer specific information.
	ExifIFD_TagType_UserComment:              `ExifIFD_TagType_UserComment`,              // ingore # Keywords or comments on the image; complements ImageDescription.
	ExifIFD_TagType_SubsecTime:               `ExifIFD_TagType_SubsecTime`,               // ingore # A tag used to record fractions of seconds for the DateTime tag.
	ExifIFD_TagType_SubsecTimeOriginal:       `ExifIFD_TagType_SubsecTimeOriginal`,       // ingore # A tag used to record fractions of seconds for the DateTimeOriginal tag.
	ExifIFD_TagType_SubsecTimeDigitized:      `ExifIFD_TagType_SubsecTimeDigitized`,      // ingore # A tag used to record fractions of seconds for the DateTimeDigitized tag.
	ExifIFD_TagType_FlashpixVersion:          `ExifIFD_TagType_FlashpixVersion`,          // ingore # The Flashpix format version supported by a FPXR file.
	ExifIFD_TagType_ColorSpace:               `ExifIFD_TagType_ColorSpace`,               // ingore # The color space information tag is always recorded as the color space specifier.
	ExifIFD_TagType_PixelXDimension:          `ExifIFD_TagType_PixelXDimension`,          // ingore # Specific to compressed data; the valid width of the meaningful image.
	ExifIFD_TagType_PixelYDimension:          `ExifIFD_TagType_PixelYDimension`,          // ingore # Specific to compressed data; the valid height of the meaningful image.
	ExifIFD_TagType_RelatedSoundFile:         `ExifIFD_TagType_RelatedSoundFile`,         // ingore # Used to record the name of an audio file related to the image data.
	ExifIFD_TagType_FlashEnergy:              `ExifIFD_TagType_FlashEnergy`,              // ingore # Indicates the strobe energy at the time the image is captured, as measured in Beam Candle Power Seconds
	ExifIFD_TagType_SpatialFrequencyResponse: `ExifIFD_TagType_SpatialFrequencyResponse`, // ingore # Records the camera or input device spatial frequency table and SFR values in the direction of image width, image height, and diagonal direction, as specified in ISO 12233.
	ExifIFD_TagType_FocalPlaneXResolution:    `ExifIFD_TagType_FocalPlaneXResolution`,    // ingore # Indicates the number of pixels in the image width (X) direction per FocalPlaneResolutionUnit on the camera focal plane.
	ExifIFD_TagType_FocalPlaneYResolution:    `ExifIFD_TagType_FocalPlaneYResolution`,    // ingore # Indicates the number of pixels in the image height (Y) direction per FocalPlaneResolutionUnit on the camera focal plane.
	ExifIFD_TagType_FocalPlaneResolutionUnit: `ExifIFD_TagType_FocalPlaneResolutionUnit`, // ingore # Indicates the unit for measuring FocalPlaneXResolution and FocalPlaneYResolution.
	ExifIFD_TagType_SubjectLocation:          `ExifIFD_TagType_SubjectLocation`,          // ingore # Indicates the location of the main subject in the scene.
	ExifIFD_TagType_ExposureIndex:            `ExifIFD_TagType_ExposureIndex`,            // ingore # Indicates the exposure index selected on the camera or input device at the time the image is captured.
	ExifIFD_TagType_SensingMethod:            `ExifIFD_TagType_SensingMethod`,            // ingore # Indicates the image sensor type on the camera or input device.
	ExifIFD_TagType_FileSource:               `ExifIFD_TagType_FileSource`,               // ingore # Indicates the image source.
	ExifIFD_TagType_SceneType:                `ExifIFD_TagType_SceneType`,                // ingore # Indicates the type of scene.
	ExifIFD_TagType_CFAPattern:               `ExifIFD_TagType_CFAPattern`,               // ingore # Indicates the color filter array (CFA) geometric pattern of the image sensor when a one-chip color area sensor is used.
	ExifIFD_TagType_CustomRendered:           `ExifIFD_TagType_CustomRendered`,           // ingore # Indicates the use of special processing on image data, such as rendering geared to output.
	ExifIFD_TagType_ExposureMode:             `ExifIFD_TagType_ExposureMode`,             // ingore # Indicates the exposure mode set when the image was shot.
	ExifIFD_TagType_WhiteBalance:             `ExifIFD_TagType_WhiteBalance`,             // ingore # Indicates the white balance mode set when the image was shot.
	ExifIFD_TagType_DigitalZoomRatio:         `ExifIFD_TagType_DigitalZoomRatio`,         // ingore # Indicates the digital zoom ratio when the image was shot.
	ExifIFD_TagType_FocalLengthIn35mmFilm:    `ExifIFD_TagType_FocalLengthIn35mmFilm`,    // ingore # Indicates the equivalent focal length assuming a 35mm film camera, in mm.
	ExifIFD_TagType_SceneCaptureType:         `ExifIFD_TagType_SceneCaptureType`,         // ingore # Indicates the type of scene that was shot.
	ExifIFD_TagType_GainControl:              `ExifIFD_TagType_GainControl`,              // ingore # Indicates the degree of overall image gain adjustment.
	ExifIFD_TagType_Contrast:                 `ExifIFD_TagType_Contrast`,                 // ingore # Indicates the direction of contrast processing applied by the camera when the image was shot.
	ExifIFD_TagType_Saturation:               `ExifIFD_TagType_Saturation`,               // ingore # Indicates the direction of saturation processing applied by the camera when the image was shot.
	ExifIFD_TagType_Sharpness:                `ExifIFD_TagType_Sharpness`,                // ingore # Indicates the direction of sharpness processing applied by the camera when the image was shot.
	ExifIFD_TagType_DeviceSettingDescription: `ExifIFD_TagType_DeviceSettingDescription`, // ingore # This tag indicates information on the picture-taking conditions of a particular camera model.
	ExifIFD_TagType_SubjectDistanceRange:     `ExifIFD_TagType_SubjectDistanceRange`,     // ingore # Indicates the distance to the subject.
	ExifIFD_TagType_ImageUniqueID:            `ExifIFD_TagType_ImageUniqueID`,            // ingore # Indicates an identifier assigned uniquely to each image.
}

func (p ExifIFD_TagType) String() string {
	if name, ok := _ExifIFD_TagTypeTable[p]; ok {
		return name
	}
	return fmt.Sprintf("ExifIFD_TagType_Unknown(%d)", uint16(p))
}

var _GPSIFD_TagTypeTable = map[GPSIFD_TagType]string{
	GPSIFD_TagType_GPSVersionID:        `GPSIFD_TagType_GPSVersionID`,        // ingore # Indicates the version of GPSInfoIFD.
	GPSIFD_TagType_GPSLatitudeRef:      `GPSIFD_TagType_GPSLatitudeRef`,      // ingore # Indicates whether the latitude is north or south latitude.
	GPSIFD_TagType_GPSLatitude:         `GPSIFD_TagType_GPSLatitude`,         // ingore # Indicates the latitude.
	GPSIFD_TagType_GPSLongitudeRef:     `GPSIFD_TagType_GPSLongitudeRef`,     // ingore # Indicates whether the longitude is east or west longitude.
	GPSIFD_TagType_GPSLongitude:        `GPSIFD_TagType_GPSLongitude`,        // ingore # Indicates the longitude.
	GPSIFD_TagType_GPSAltitudeRef:      `GPSIFD_TagType_GPSAltitudeRef`,      // ingore # Indicates the altitude used as the reference altitude.
	GPSIFD_TagType_GPSAltitude:         `GPSIFD_TagType_GPSAltitude`,         // ingore # Indicates the altitude based on the reference in GPSAltitudeRef.
	GPSIFD_TagType_GPSTimeStamp:        `GPSIFD_TagType_GPSTimeStamp`,        // ingore # Indicates the time as UTC (Coordinated Universal Time).
	GPSIFD_TagType_GPSSatellites:       `GPSIFD_TagType_GPSSatellites`,       // ingore # Indicates the GPS satellites used for measurements.
	GPSIFD_TagType_GPSStatus:           `GPSIFD_TagType_GPSStatus`,           // ingore # Indicates the status of the GPS receiver when the image is recorded.
	GPSIFD_TagType_GPSMeasureMode:      `GPSIFD_TagType_GPSMeasureMode`,      // ingore # Indicates the GPS measurement mode.
	GPSIFD_TagType_GPSDOP:              `GPSIFD_TagType_GPSDOP`,              // ingore # Indicates the GPS DOP (data degree of precision).
	GPSIFD_TagType_GPSSpeedRef:         `GPSIFD_TagType_GPSSpeedRef`,         // ingore # Indicates the unit used to express the GPS receiver speed of movement.
	GPSIFD_TagType_GPSSpeed:            `GPSIFD_TagType_GPSSpeed`,            // ingore # Indicates the speed of GPS receiver movement.
	GPSIFD_TagType_GPSTrackRef:         `GPSIFD_TagType_GPSTrackRef`,         // ingore # Indicates the reference for giving the direction of GPS receiver movement.
	GPSIFD_TagType_GPSTrack:            `GPSIFD_TagType_GPSTrack`,            // ingore # Indicates the direction of GPS receiver movement.
	GPSIFD_TagType_GPSImgDirectionRef:  `GPSIFD_TagType_GPSImgDirectionRef`,  // ingore # Indicates the reference for giving the direction of the image when it is captured.
	GPSIFD_TagType_GPSImgDirection:     `GPSIFD_TagType_GPSImgDirection`,     // ingore # Indicates the direction of the image when it was captured.
	GPSIFD_TagType_GPSMapDatum:         `GPSIFD_TagType_GPSMapDatum`,         // ingore # Indicates the geodetic survey data used by the GPS receiver.
	GPSIFD_TagType_GPSDestLatitudeRef:  `GPSIFD_TagType_GPSDestLatitudeRef`,  // ingore # Indicates whether the latitude of the destination point is north or south latitude.
	GPSIFD_TagType_GPSDestLatitude:     `GPSIFD_TagType_GPSDestLatitude`,     // ingore # Indicates the latitude of the destination point.
	GPSIFD_TagType_GPSDestLongitudeRef: `GPSIFD_TagType_GPSDestLongitudeRef`, // ingore # Indicates whether the longitude of the destination point is east or west longitude.
	GPSIFD_TagType_GPSDestLongitude:    `GPSIFD_TagType_GPSDestLongitude`,    // ingore # Indicates the longitude of the destination point.
	GPSIFD_TagType_GPSDestBearingRef:   `GPSIFD_TagType_GPSDestBearingRef`,   // ingore # Indicates the reference used for giving the bearing to the destination point.
	GPSIFD_TagType_GPSDestBearing:      `GPSIFD_TagType_GPSDestBearing`,      // ingore # Indicates the bearing to the destination point.
	GPSIFD_TagType_GPSDestDistanceRef:  `GPSIFD_TagType_GPSDestDistanceRef`,  // ingore # Indicates the unit used to express the distance to the destination point.
	GPSIFD_TagType_GPSDestDistance:     `GPSIFD_TagType_GPSDestDistance`,     // ingore # Indicates the distance to the destination point.
	GPSIFD_TagType_GPSProcessingMethod: `GPSIFD_TagType_GPSProcessingMethod`, // ingore # A character string recording the name of the method used for location finding.
	GPSIFD_TagType_GPSAreaInformation:  `GPSIFD_TagType_GPSAreaInformation`,  // ingore # A character string recording the name of the GPS area.
	GPSIFD_TagType_GPSDateStamp:        `GPSIFD_TagType_GPSDateStamp`,        // ingore # A character string recording date and time information relative to UTC (Coordinated Universal Time).
	GPSIFD_TagType_GPSDifferential:     `GPSIFD_TagType_GPSDifferential`,     // ingore # Indicates whether differential correction is applied to the GPS receiver.
}

func (p GPSIFD_TagType) String() string {
	if name, ok := _GPSIFD_TagTypeTable[p]; ok {
		return name
	}
	return fmt.Sprintf("GPSIFD_TagType_Unknown(%d)", uint16(p))
}

var _InteroperabilityIFD_TagTypeTable = map[InteroperabilityIFD_TagType]string{
	InteroperabilityIFD_TagType_InteroperabilityIndex: `InteroperabilityIFD_TagType_InteroperabilityIndex`, // ingore # Indicates the identification of the Interoperability rule.
}

func (p InteroperabilityIFD_TagType) String() string {
	if name, ok := _InteroperabilityIFD_TagTypeTable[p]; ok {
		return name
	}
	return fmt.Sprintf("InteroperabilityIFD_TagType_Unknown(%d)", uint16(p))
}
