#------------------------------------------------------------------------------ # File: tiff_version.config # # Description: This config file contains the definition for a Composite # TIFFVersion tag used to determine the version of a TIFF file # # Usage: exiftool -config tiff_version.config -tiffversion DIR # # Requires: ExifTool version 11.50 or later # # Revisions: 2019/06/06 - Bryan K. Williams (aka StarGeek) Created # 2019/06/07 - P. Harvey added test of TIFF format types # # References: http://jhove.openpreservation.org/modules/tiff/#profiles #------------------------------------------------------------------------------ # Checks if at least one the values passed are defined. sub has_defined { for my $i ( @_ ) { return 1 if defined $i; } return 0; } %Image::ExifTool::UserDefined = ( 'Image::ExifTool::Composite' => { TIFFVersion => { Require => { 0 => 'FileType' }, Desire => { # Version 5 1 => 'EXIF:Artist', # Artist (315/0x013b) 2 => 'EXIF:ColorMap', # ColorMap (320/0x0140) 3 => 'EXIF:ModifyDate', # DateTime (306/0x0132) Called DateTime by EXIF spec, ModifyDate by exiftool 4 => 'EXIF:HostComputer', # HostComputer (316/0x013c) 5 => 'EXIF:SubfileType', # NewSubfileType (254/0x00fe) Called NewSubfileType by TIFF spec, SubfileType by exiftool 6 => 'EXIF:Predictor', # Predictor (317/0x013d) 7 => 'EXIF:PrimaryChromaticities', # PrimaryChromaticities (319/0x013f) 8 => 'EXIF:Software', # Software (305/0x0131) 9 => 'EXIF:WhitePoint', # WhitePoint (318/0x013e) # Version 6 10 => 'EXIF:Copyright', # Copyright (33432/0x8298) 11 => 'EXIF:DotRange', # DotRange (336/0x0150) 12 => 'EXIF:ExtraSamples', # ExtraSamples (338/0x0152) 13 => 'EXIF:HalftoneHints', # HalftoneHints (321/0x0141) 14 => 'EXIF:InkNames', # InkNames (333/0x014d) 15 => 'EXIF:InkSet', # InkSet (332/0x014c) 16 => 'EXIF:JPEGACTables', # JPEGACTables (521/0x0209) 17 => 'EXIF:JPEGDCTables', # JPEGDCTables (520/0x0208) 18 => 'EXIF:ThumbnailOffset', # JPEGInterchangeFormat (513/0x0201) 19 => 'EXIF:ThumbnailLength ', # JPEGInterchangeFormatLength (514/0x0202) 20 => 'EXIF:JPEGLosslessPredictors', # JPEGLosslessPredictors (517/0x0205) 21 => 'EXIF:JPEGPointTransforms', # JPEGPointTransforms (518/0x0206) 22 => 'EXIF:JPEGProc', # JPEGProc (512/0x0200) 23 => 'EXIF:JPEGRestartInterval', # JPEGRestartInterval (515/0x0203) 24 => 'EXIF:JPEGQTables', # JPEGQTables (519/0x0207) 25 => 'EXIF:NumberofInks', # NumberOfInks (334/0x014e) 26 => 'EXIF:ReferenceBlackWhite', # ReferenceBlackWhite (532/0x0214) 27 => 'EXIF:SampleFormat', # SampleFormat (339/0x0153) 28 => 'EXIF:SMinSampleValue', # SMinSampleValue (340/0x0154) 29 => 'EXIF:SMaxSampleValue', # SMaxSampleValue (341/0x0155) 30 => 'EXIF:TargetPrinter', # TargetPrinter (337/0x0151) 31 => 'EXIF:TileLength', # TileLength (323/0x0143) 32 => 'EXIF:TileOffsets', # TileOffsets (324/0x0144) 33 => 'EXIF:TileWidth', # TileWidth (322/0x0142) 34 => 'EXIF:TileByteCounts', # TileByteCounts (325/0x0145) 35 => 'EXIF:TransferRange', # TransferRange (342/0x0156) 36 => 'EXIF:YCbCrCoefficients', # YCbCrCoefficients (529/0x0211) 37 => 'EXIF:YCbCrPositioning', # YCbCrPositioning (531/0x0213) 38 => 'EXIF:YCbCrSubSampling', # YCbCrSubSampling (530/0x0212) # Other tags to check 39 => 'EXIF:PhotometricInterpretation', # PhotometricInterpretation (262/0x0106) 40 => 'EXIF:Compression', # Compression (259/0x0103) }, ValueConv => q{ if ($val[0] ne 'TIFF') { return undef; } unless ($$self{SaveFormat}) { return ''; } foreach (qw(int8s undef int16s int32s rational64s float double)) { return '6.0' if $$self{SaveFormat}{$_}; } if ( $val[39]=~/^(?:C(?:IELab|MYK)|YCbCr)$/ or $val[40] eq 'JPEG (old-style)' or has_defined(@val[10..38]) ) { return '6.0'; } if ($val[39]=~/^(?:Transparency Mask|RGB Palette)$/ or $val[40] eq 'LZW' or has_defined(@val[1..9]) ) { return '5.0'; } return '4.0'; }, }, }, ); # A couple of shortcuts to test for the existence of certain tags %Image::ExifTool::UserDefined::Shortcuts = ( TiffVersion5Tags => [ 'EXIF:Artist', 'EXIF:ColorMap', 'EXIF:ModifyDate', 'EXIF:HostComputer', 'EXIF:SubfileType', 'EXIF:Predictor', 'EXIF:PrimaryChromaticities', 'EXIF:Software', 'EXIF:WhitePoint', ], TiffVersion6Tags => [ 'EXIF:Copyright', 'EXIF:DotRange', 'EXIF:ExtraSamples', 'EXIF:HalftoneHints', 'EXIF:InkNames', 'EXIF:InkSet', 'EXIF:JPEGACTables', 'EXIF:JPEGDCTables', 'EXIF:ThumbnailOffset', 'EXIF:ThumbnailLength ', 'EXIF:JPEGLosslessPredictors', 'EXIF:JPEGPointTransforms', 'EXIF:JPEGProc', 'EXIF:JPEGRestartInterval', 'EXIF:JPEGQTables', 'EXIF:NumberofInks', 'EXIF:ReferenceBlackWhite', 'EXIF:SampleFormat', 'EXIF:SMinSampleValue', 'EXIF:SMaxSampleValue', 'EXIF:TargetPrinter', 'EXIF:TileLength', 'EXIF:TileOffsets', 'EXIF:TileWidth', 'EXIF:TileByteCounts', 'EXIF:TransferRange', 'EXIF:YCbCrCoefficients', 'EXIF:YCbCrPositioning', 'EXIF:YCbCrSubSampling', ], ); # Must set SaveFormat option to provide access to the tag format types %Image::ExifTool::UserDefined::Options = ( SaveFormat => 1, ); 1; #end